← 返回首页

项目08: 特征工程

构造衍生变量,编码类别,分箱与特征变换

📊 数据集预览

使用 user_logs 数据集,包含用户ID、登录次数、购买次数、消费金额等信息。

user_logs.csv(前5行)

🎯 学习目标

  • 从现有列计算衍生特征
  • 对类别变量进行编码
  • 对连续变量进行分箱
  • 特征标准化与归一化
  • 特征筛选与变换

💻 实战练习

知识点1:加载数据

首先读取用户行为数据集,这是特征工程的第一步。

import pandas as pd

df = pd.read_csv('user_logs.csv')
print(df.head())
💡 小贴士:pd.read_csv() 是 Pandas 最常用的数据读取函数,支持多种参数配置。

知识点2:构造衍生特征

通过现有列的运算创建新特征,这是特征工程中最常用的技巧。

df['avg_spent_per_login'] = df['total_spent'] / df['logins']
df['conversion_rate'] = df['purchases'] / df['logins']
print(df[['user_id', 'avg_spent_per_login', 'conversion_rate']].head())
⚠️ 注意事项:构造衍生特征时要注意除零问题,可以使用 .replace(0, 1) 或条件判断来处理。

知识点3:类别编码

将类别变量转换为数值,适合机器学习算法处理。

df['gender_encoded'] = df['gender'].map({'F': 0, 'M': 1})
print(df[['gender', 'gender_encoded']].head())
💡 小贴士:map() 方法非常适合单列的映射转换,也可使用 LabelEncoder 或 pd.get_dummies() 进行更复杂的编码。

知识点4:连续变量分箱

将连续变量划分为不同的区间,便于模型捕捉非线性关系。

bins = [0, 25, 35, 50, 100]
labels = ['青年', '中青年', '中年', '中老年']
df['age_group'] = pd.cut(df['age'], bins=bins, labels=labels)
print(df[['age', 'age_group']].head())
⚠️ 注意事项:分箱边界的选择会影响模型效果,需要结合业务理解和数据分布来决定。

知识点5:特征标准化

将数值特征转换为均值为0、标准差为1的分布,适用于需要距离计算的算法。

df['logins_std'] = (df['logins'] - df['logins'].mean()) / df['logins'].std()
print(df[['logins', 'logins_std']].head())
💡 小贴士:对于有异常值的数据,可以使用 RobustScaler:(x - 中位数) / IQR 进行更稳健的标准化。
综合代码运行
点击"运行代码"查看输出...
🚀 总代码运行框 - 特征工程完整示例
点击"运行全部代码"查看完整输出...