特征处理是机器学习的 “数据燃料优化环节”——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\[\["用户收入"]])
\`\`\` |
\
\`\`\`python
\
bins = \[0,7,30,90,float("inf")]
df\["复购分层"] = pd.cut(df\["复购间隔"], bins=bins, labels=\["高频","中频","低频","沉睡"])
3. 特征衍生(核心场景:单一特征区分度低)
\
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
\
df\["下单时间"] = pd.to\_datetime(df\["下单时间"])
df\["下单小时"] = df\["下单时间"].dt.hour
df\["是否周末"] = df\["下单时间"].dt.weekday.apply(lambda x:1 if x>=5 else 0)
\
df\_sorted = df.sort\_values(\["用户ID","下单时间"])
df\_sorted\["7d下单数"] = df\_sorted.groupby("用户ID")\["下单时间"].transform(
&
)
(四)特征选择与降维:剔除冗余
1. 特征选择(核心方法)
\
from sklearn.feature\_selection import VarianceThreshold
selector = VarianceThreshold(0.01)
df\_selected = selector.fit\_transform(df\[数值特征列])
\
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier()
rf.fit(X, y)
重要性 = pd.Series(rf.feature\_importances\_, index=X.columns)
保留特征 = 重要性\[重要性>0.05].index
2. 降维(核心方法:PCA)
from sklearn.decomposition import PCA
pca = PCA(n\_components=20)
X\_pca = pca.fit\_transform(X)
print(f"累计解释方差:{pca.explained\_variance\_ratio\_.sum():.2%}")
三、CDA 特征处理全流程
探索:查缺失率(核心字段≤1%)、数值分布(极端值)、相关性(|r|>0.8 需删其一);
处理:按类型执行(时间→分类型→数值型→冗余剔除);
选择 / 降维:小特征量用重要性筛选,大特征量用 PCA;
验证:对比模型效果(如处理后准确率提升≥5%)、特征稳定性(跨时间 Top10 重合率≥70%)。
四、实战案例:电商用户流失预测
背景
原始数据 30 字段(含用户 / 消费 / 订单),目标:构建流失预测模型(1 = 流失)。
核心步骤
数值:收入(稳健归一化)、消费额(对数转换),衍生 “消费率”;
效果:原始特征准确率 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万+在读~ !