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 卡片。