Feature Selection(特征选择)
Skill-Feature-Selection · 12-ML基础
causalexperimentforecastingoptimizationdata_collection广告与投放客服与VOC数据采集与治理MAS与智能体工程WF-B 广告优化WF-C 客服分诊WF-D 选品扫描WF-H 复购增长
年化 ROI30-60 万元
实现难度⭐⭐⭐⭐☆
业务视角
适用角色数据分析师 / 数据工程师 · 运营负责人 · 产品经理
适用平台选品评分 · 差评预测 · 用户流失预警 · 广告出价预测
什么情况下用想用机器学习解决业务问题,但不知道该选什么模型;模型上线后效果越来越差不知道为什么
成功是什么样的选对算法工具减少 50% 试错时间,模型上线后可监控可解释,数据团队和业务团队建立共同语言
业务痛点
1. 解决的问题
我们从多个数据源(CRM、广告平台、网站分析、客服系统)汇总了 200+ 特征
2. 核心算法逻辑
少即是多——从大量特征中筛选出真正有用的子集,提升模型性能、降低过拟合风险、减少训练/推理成本、增强可解释性。
3. 业务应用场景
业务问题:我们从多个数据源(CRM、广告平台、网站分析、客服系统)汇总了 200+ 特征。但很多冗余特征不仅没用,还拖慢训练速度和增加过拟合。需要筛选出真正影响流失的 top-20 特征。
数据要求:100K 用户 × 200 特征。先用 SHAP 做全局重要性排序,再用 RFE 验证
预期产出:SHAP 识别出 top-20 特征贡献了 90% 的预测力。精简后模型:训练速度快 3x,AUC 仅下降 0.005
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:特征精简可降低训练成本 60%+、推理成本 70%+、数据采集成本 50%+。月省 $5,000-10,000;同时更好的特征集提升模型 AUC 1-3pp。年化贡献 30-60 万元。
- 实施难度:⭐⭐⭐⭐☆(4 星)— 需要理解不同方法的适用场景和局限性
- 优先级评分:⭐⭐⭐☆☆(3 星)— 模型已经有 200 特征时才紧迫,50 特征以下收益有限
- 评估依据:特征工程是图谱 #1 被依赖节点,特征选择是其下游最自然的延伸
7. 代码模板
代码块数量:1 · 路径:paper2skills-code/ml_fundamentals/feature_selection
"""
Feature Selection Toolkit
特征选择工具集 — Filter / Wrapper / Embedded / SHAP
"""
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import (
mutual_info_classif, RFE, RFECV, SelectKBest, SelectFromModel
)
from sklearn.linear_model import LassoCV
from xgboost import XGBClassifier
from typing import List, Dict, Tuple
def filter_features(
X: pd.DataFrame, y: np.ndarray,
k: int = 20, method: str = 'mutual_info'
) -> Tuple[List[str], pd.DataFrame]:
"""
过滤法特征选择
Returns:
(selected_columns, importance_scores)
"""
if method == 'mutual_info':
scores = mutual_info_classif(X, y, random_state=42)
elif method == 'variance':
scores = X.var().values
else:
raise ValueError(f"Unknown method: {method}")
importance = pd.DataFrame({
'feature': X.columns, 'score': scores
}).sort_values('score', ascending=False)
selected = importance.head(k)['feature'].tolist()
return selected, importance
def rfe_feature_selection(
X: np.ndarray, y: np.ndarray,
estimator=None, n_features: int = 20, cv: bool = True
) -> List[int]:
"""
RFE (Recursive Feature Elimination) 特征选择
"""
estimator = estimator or RandomForestClassifier(n_estimators=50, random_state=42)
if cv:
selector = RFECV(estimator, min_features_to_select=n_features,
cv=3, scoring='roc_auc')
else:
selector = RFE(estimator, n_features_to_select=n_features)
selector.fit(X, y)
return list(np.where(selector.support_)[0])
8. 论文来源
未自动抽取;请查看原始 Skill 卡片。