paper2skills Playbook

Feature Engineering for E-Commerce Machine Learning

Skill-Feature-Engineering · 12-ML基础

causalexperimentforecastingrecommendationmulti_agentpricing客服与VOC推荐与搜索MAS与智能体工程定价与利润WF-C 客服分诊WF-F 动态定价WF-H 复购增长
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色数据分析师 / 数据工程师 · 运营负责人 · 产品经理
适用平台选品评分 · 差评预测 · 用户流失预警 · 广告出价预测
什么情况下用想用机器学习解决业务问题,但不知道该选什么模型;模型上线后效果越来越差不知道为什么
成功是什么样的选对算法工具减少 50% 试错时间,模型上线后可监控可解释,数据团队和业务团队建立共同语言
业务痛点
不知道该用什么模型模型准确率不稳定业务不相信模型结果模型黑盒说不清为什么这么预测

1. 解决的问题

核心问题:模型效果的上限由特征质量决定。同样的算法,好的特征 vs 差的特征,效果可能差3-5倍。特征工程是"把领域知识注入模型的艺术"。

2. 核心算法逻辑

核心问题:模型效果的上限由特征质量决定。同样的算法,好的特征 vs 差的特征,效果可能差35倍。特征工程是"把领域知识注入模型的艺术"。

3. 业务应用场景

业务问题:预测哪些用户会在30天内流失,用于精准召回。

原始数据:用户ID、注册日期、订单记录、浏览记录

| 特征名 | 计算方式 | 业务含义 | |--------|---------|---------| | recency_days | 今天 - 最后购买日 | 多久没来了 | | frequency_90d | 近90天订单数 | 购买活跃度 | | monetary_total | 累计消费金额 | 用户价值 | | avg_order_value | 总消费 / 订单数 | 客单价偏好 | | browse_to_buy_ratio | 浏览次数 / 购买次数 | 购买决策效率 | | category_diversity | 购买过的品类数 | 兴趣广度 | | days_sinc

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI:特征质量提升 → 模型效果提升30-50%,直接转化为业务收益
  • 难度:⭐⭐⭐☆☆(3/5)— 需要领域知识,不是纯技术问题
  • 优先级:⭐⭐⭐⭐⭐(5/5)— 所有ML技能的前置基础,没有它就没有模型效果

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
Feature Engineering — 特征工程工具箱
支持:数值处理、类别编码、时序特征、特征选择
"""

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder
from sklearn.feature_selection import mutual_info_classif, SelectKBest


class FeatureEngineer:
    """特征工程器"""

    def __init__(self):
        self.scalers = {}
        self.encoders = {}
        self.target_means = {}

    def log_transform(self, df, cols, offset=1):
        """对数变换"""
        df = df.copy()
        for c in cols:
            df[f'{c}_log'] = np.log1p(df[c] + offset)
        return df

    def binning(self, df, col, n_bins=5, method='quantile'):
        """分箱"""
        df = df.copy()
        if method == 'quantile':
            df[f'{col}_bin'] = pd.qcut(df[col], q=n_bins, labels=False, duplicates='drop')
        else:
            df[f'{col}_bin'] = pd.cut(df[col], bins=n_bins, labels=False)
        return df

    def target_encoding(self, df, cat_col, target_col, smoothing=10):
        """目标编码(带平滑)"""
        df = df.copy()
        global_mean = df[target_col].mean()

        stats = df.groupby(cat_col)[target_col].agg(['mean', 'count'])
        smoothed = (stats['mean'] * stats['count'] + global_mean * smoothing) / (stats['count'] + smoothing)

        df[f'{cat_col}_te'] = df[cat_col].map(smoothed)
        self.target_means[cat_col] = smoothed.to_dict()
        return df

    def time_features(self, df, datetime_col):
        """时间特征提取"""
        df = df.copy()
        dt = pd.to_datetime(df[datetime_col])
        df['hour'] = dt.dt.hour
        df['dayofweek'] = dt.dt.dayofweek
        df['month'] = dt.dt.month
        df['is_weekend'] = (dt.dt.dayofweek >= 5).astype(int)
        df['is_month_start'] = dt.dt.is_month_start.astype(int)
        return df

    def rolling_features(self, df, group_col, value_col, windows=[7, 14, 30]):
        """滚动统计特征"""

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。