特征处理是机器学习的 “数据燃料优化环节”——CDA 分析师通过系统化处理,将原始数据转化为 “有区分度、适配模型” 的有效特征,直接决定模型上限。本文聚焦核心方法与实操要点,助力快速掌握关键能力。
一、核心认知:特征处理的本质与 CDA 价值
(一)核心目标
有效性:挖掘潜在关联(如 “注册时长→用户活跃度”);
适配性:贴合模型需求(如线性模型需归一化,树模型无需);
简洁性:剔除冗余(如 “身高” 与电商消费无关,可删);
一致性:统一格式(如年龄分箱避免极端值)。
(二)CDA 与普通处理的差异
| 维度 | 普通处理 | CDA 处理 |
|---|---|---|
| 逻辑 | 固定模板(如所有缺失值用 0 填) | 业务导向(如收入缺失用同行业中位数) |
| 目标 | 追求特征数量 | 提升模型性能(如准确率从 75%→85%) |
| 评估 | 直接输入模型 | 用特征重要性 / 相关性验证价值 |
二、核心特征处理方法(按类型)
(一)数值型特征:消除干扰,适配模型
1. 归一化 / 标准化(核心场景:量纲差异大)
| 方法 | 逻辑 | 工具代码(Python) |
|---|---|---|
| 标准化(Z-Score) | 均值 = 0,标准差 = 1(适用于正态分布) | ```python |
| from sklearn.preprocessing import StandardScaler | ||
| df [["消费频次"]] = StandardScaler ().fit_transform (df [["消费频次"]]) |
\| 稳健归一化 | 抗极端值(适用于收入等长尾分布) | \`\`\`python
from sklearn.preprocessing import RobustScaler
df\[\["用户收入"]] = RobustScaler().fit\_transform(df\[\["用户收入"]])
\`\`\` |
\#### 2. 分箱(核心场景:非线性关系)
\`\`\`python
\# 电商复购间隔自定义分箱(业务导向)
bins = \[0,7,30,90,float("inf")]
df\["复购分层"] = pd.cut(df\["复购间隔"], bins=bins, labels=\["高频","中频","低频","沉睡"])
3. 特征衍生(核心场景:单一特征区分度低)
\# 消费率=近30天消费/收入(反映消费意愿)
df\["消费率"] = df\["30d消费额"] / df\["用户收入"]
\# 注册时长=当前时间-注册时间(天)
df\["注册时长"] = (pd.Timestamp("2024-10-31") - pd.to\_datetime(df\["注册时间"])).dt.days
(二)分类型特征:编码转换,适配模型
| 编码方式 | 逻辑 | 适用场景 | 代码示例 |
|---|---|---|---|
| Label Encoding | 类别→唯一整数(如男 = 0,女 = 1) | 有序分类 / 树模型(随机森林) | ```python |
| from sklearn.preprocessing import LabelEncoder | |||
| df ["学历编码"] = LabelEncoder ().fit_transform (df ["学历"]) |
\| One-Hot Encoding | 类别→二进制列(如男=\[1,0]) | 无序+低基数(性别、支付方式) | \`\`\`python
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse\_output=False, drop="first")
df = pd.concat(\[df, pd.Datafr ame(ohe.fit\_transform(df\[\["支付方式"]]))], axis=1)
\`\`\` |
\| 目标编码 | 类别→目标均值(如城市违约率=0.2) | 高基数(城市、商品ID) | \`\`\`python
from category\_encoders import TargetEncoder
df\["城市编码"] = TargetEncoder().fit\_transform(df\["城市"], df\["违约标签"])
\`\`\` |
\### (三)时间型特征:提取时序规律
\`\`\`python
\# 1. 提取时间组件(下单小时、是否周末)
df\["下单时间"] = pd.to\_datetime(df\["下单时间"])
df\["下单小时"] = df\["下单时间"].dt.hour
df\["是否周末"] = df\["下单时间"].dt.weekday.apply(lambda x:1 if x>=5 else 0)
\# 2. 时序统计(近7天下单次数)
df\_sorted = df.sort\_values(\["用户ID","下单时间"])
df\_sorted\["7d下单数"] = df\_sorted.groupby("用户ID")\["下单时间"].transform(
  lambda x:x.rolling(window=pd.Timedelta(days=7), on="下单时间").count()
)
(四)特征选择与降维:剔除冗余
1. 特征选择(核心方法)
\# 1. 方差阈值(删无区分度特征)
from sklearn.feature\_selection import VarianceThreshold
selector = VarianceThreshold(0.01)
df\_selected = selector.fit\_transform(df\[数值特征列])
\# 2. 随机森林特征重要性(删低贡献特征)
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier()
rf.fit(X, y)
重要性 = pd.Series(rf.feature\_importances\_, index=X.columns)
保留特征 = 重要性\[重要性>0.05].index # 保留贡献>5%的特征
2. 降维(核心方法:PCA)
from sklearn.decomposition import PCA
pca = PCA(n\_components=20) # 降至20维
X\_pca = pca.fit\_transform(X)
print(f"累计解释方差:{pca.explained\_variance\_ratio\_.sum():.2%}") # 需≥80%
三、CDA 特征处理全流程
探索:查缺失率(核心字段≤1%)、数值分布(极端值)、相关性(|r|>0.8 需删其一);
处理:按类型执行(时间→分类型→数值型→冗余剔除);
选择 / 降维:小特征量用重要性筛选,大特征量用 PCA;
验证:对比模型效果(如处理后准确率提升≥5%)、特征稳定性(跨时间 Top10 重合率≥70%)。
四、实战案例:电商用户流失预测
背景
原始数据 30 字段(含用户 / 消费 / 订单),目标:构建流失预测模型(1 = 流失)。
核心步骤
处理:
时间:提取 “注册时长、末次下单距今”;
分类:职业(目标编码)、性别(One-Hot);
数值:收入(稳健归一化)、消费额(对数转换),衍生 “消费率”;
选择:用随机森林保留 18 个高重要性特征;
效果:原始特征准确率 72.5%→处理后 81.2%,AUC 0.78→0.86。
五、常见误区与规避
过度衍生:如 “下单时间” 衍生 10 + 特征→仅保留 “末次下单距今、注册时长”;
模型适配错:树模型用 One-Hot→改用 Label 编码;线性模型不归一化→补标准化;
不验证:直接输入模型→必做效果对比与稳定性验证;
脱离业务:年龄等宽分箱→按 “18-25/26-35/36-45/46+”(电商核心客群)分箱。
六、结语
特征处理是 “业务 + 技术” 的结合 ——CDA 分析师需以模型需求为导向,用最少的有效特征实现最优性能,这是数据驱动决策的核心能力。
推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !



雷达卡







京公网安备 11010802022788号







