AI行业数据挖掘实战:从零构建用户行为分析模型

1次阅读
没有评论

共计 1950 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

一、数据挖掘的起点:脏数据清洗实战

电商场景的原始用户行为日志通常存在三大问题:

AI 行业数据挖掘实战:从零构建用户行为分析模型

  • 字段缺失 :约 15% 的 user_id 字段为空,30% 的点击事件缺少时间戳
  • 噪声干扰 :存在测试账号产生的异常数据(如单日点击量超过 10 万次)
  • 格式混乱 :时间戳包含多种时区格式(UTC+ 8 和 Unix 时间戳混用)

使用 Pandas 进行数据清洗的核心操作:

# 处理缺失值(删除无效行 + 填充默认值)df = df.dropna(subset=['user_id'])  # 关键 ID 不能缺失
df['click_duration'] = df['click_duration'].fillna(0)  # 未记录时长按 0 处理

# 过滤异常数据(基于业务常识)normal_range = df['daily_clicks'].quantile(0.99)  # 取 99 分位数作为阈值
df = df[df['daily_clicks'] < normal_range]

# 统一时间格式
import pytz
df['event_time'] = pd.to_datetime(df['event_time']).dt.tz_convert('Asia/Shanghai')

二、特征工程:用 RFM 模型量化用户价值

RFM 模型是分析用户行为的经典框架:

  1. Recency:最近一次访问距今的天数
  2. Frequency:最近 30 天访问频次
  3. Monetary:历史累计消费金额

代码实现示例:

# 计算 RFM 特征
current_date = pd.to_datetime('2023-08-01', utc=True)
rfm = df.groupby('user_id').agg(recency=('event_time', lambda x: (current_date - x.max()).days),
    frequency=('event_id', 'count'),
    monetary=('order_amount', 'sum')
)

# 分箱离散化(5 等分)rfm['r_score'] = pd.qcut(rfm['recency'], 5, labels=False)
rfm['f_score'] = pd.qcut(rfm['frequency'], 5, labels=False)
rfm['m_score'] = pd.qcut(rfm['monetary'], 5, labels=False)

三、模型对比:决策树 vs 逻辑回归

数据准备关键点

  • 类别特征必须进行独热编码(One-Hot Encoding)
  • 数值特征需要标准化(StandardScaler)
  • 务必先拆分训练集 / 测试集再处理
from sklearn.model_selection import train_test_split

# 先拆分再预处理!X_train, X_test, y_train, y_test = train_test_split(features, label, test_size=0.2)

scaler = StandardScaler().fit(X_train[numeric_cols])  # 只用训练集统计量
X_train[numeric_cols] = scaler.transform(X_train[numeric_cols])
X_test[numeric_cols] = scaler.transform(X_test[numeric_cols])  # 相同转换 

性能对比结果

指标 决策树 逻辑回归
准确率 0.82 0.78
AUC-ROC 0.85 0.81
训练速度 (s) 0.3 1.2

决策树更适合处理非线性关系,但需要注意防止过拟合(设置 max_depth=5)

四、避坑指南:数据泄漏的典型场景

  1. 时间穿越问题 :用未来数据预测过去
  2. 错误做法:用全量数据计算 RFM 特征后拆分数据集
  3. 正确做法:按时间先后划分训练 / 测试集

  4. 预处理陷阱

  5. 标准化时使用全量数据均值方差(应仅用训练集)
  6. 在交叉验证时在每折内部重复上述错误

五、扩展应用:文本数据的特征工程

同样的方法论可迁移到社交媒体分析:

  • 将 RFM 模型调整为 LAST 模型:
  • L(Latest Post Time)
  • A(Activity Frequency)
  • S(Social Connections)
  • T(Text Complexity)

  • 用 TF-IDF 替代数值特征:

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf = TfidfVectorizer(max_features=500)
text_features = tfidf.fit_transform(df['post_content'])

通过这个完整案例,我们实践了从原始数据到可运行模型的每个关键步骤。建议读者尝试用自己熟悉的业务数据复现流程,特别注意避免数据泄漏这个新手最容易踩的坑。

正文完
 0
评论(没有评论)