ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

淘宝用户行为分析实战:机器学习大作业全流程解析

淘宝用户行为分析实战:机器学习大作业全流程解析 简介用户行为分析是数据挖掘与机器学习领域的重要应用场景其核心在于从海量行为日志中提取有效特征并构建预测模型。理解用户行为数据的特征工程与建模方法能够帮助企业优化推荐策略、提升转化率。以淘宝平台为例通过分析用户的浏览、加购、收藏、购买等行为序列可以构建二分类模型预测用户的购买意向。本文从数据预处理、特征工程、模型对比到实验报告写作系统梳理了一套完整的机器学习项目实践路径为从事用户行为分析相关研究或课程设计的开发者提供可复用的技术方案与工程经验。 花了一整个学期打磨的机器学习大作业最后拿到了一份相当漂亮的成绩项目就是《淘宝用户行为分析》。这份作业包含完整可运行的Python源码和一份扎实的实验报告从数据清洗、特征工程到模型训练、结果可视化整套流程都走通了。这篇博文就把这个项目的完整思路、技术实现和报告写作要点全部拆开给正在做类似“用户行为分析”方向大作业的同学一个可以直接参考的路线图。先说清楚这个项目到底做了什么。淘宝用户行为分析本质上是基于用户在天猫淘宝平台上的行为日志数据通过机器学习方法预测用户是否会购买商品。任务形式是一个典型的二分类问题给定用户在一段时间内的浏览、加购、收藏、下单行为判断该用户未来是否会完成购买。听起来简单但涉及的数据量级、特征构造逻辑和模型调参细节能挖的东西非常多。我在这份作业里把整套流程完整做了下来代码、报告、可视化全齐拿高分的关键不在于模型堆得多高级而在于每一个环节都有理有据、能解释清楚为什么这么做。1. 任务界定与数据认知别急着建模先搞清楚数据在说什么拿到这个题目的第一反应很多人会直接开个Notebook开始跑模型。我劝你先冷静。淘宝用户行为分析这个题目真正拉开分数差距的地方恰恰是最容易被忽略的数据认知环节。你要做的不是“把模型跑通”而是“把业务问题转化成机器学习问题”并且能跟老师讲清楚每一步转化背后的逻辑。1.1 业务问题到机器学习问题的转化逻辑原始数据是用户行为日志每行记录代表用户在某一个时刻对某一件商品产生了一次行为。行为类型有四种浏览pv、加购cart、收藏fav、购买buy。我们要预测的是用户在未来某个时间窗口内是否会发生购买行为。这里有几个关键决策点第一预测粒度。你可以预测“用户-商品”粒度也可以预测“用户”粒度。我最终选择的是“用户”粒度也就是预测某个用户在未来7天内是否会购买任何商品。原因很简单数据集中用户行为稀疏如果做用户-商品粒度绝大多数组合都是零样本正负样本极度不平衡模型很难学到有效信息。而用户粒度虽然丢失了一部分个性化信息但样本量、正负比都更可控作为大作业来说完成度更高解释起来也更清晰。第二时间窗口划分。训练集和测试集必须按时间切分不能随机打乱。这是用户行为预测类任务最容易犯的错误。我在项目里用前80%的时间行为做特征后20%的时间做标签严格避免未来信息泄露。这一点在实验报告里专门用了一节来解释老师看了会觉得你是真懂。第三正负样本定义。我用的是用户在观测窗口内有购买记录标记为1没有购买记录标记为0。但这里有个细节——如果用户根本没有活跃行为那大概率是流失用户或者爬虫直接标记为0会引入噪声。所以我额外加了一个过滤条件至少在观测窗口内有过3次以上行为包括浏览在内的用户才进入样本集。这个细节在答辩时可以作为亮点提出来。1.2 数据集探索性分析到底该看什么淘宝用户行为数据集通常包含四列核心字段用户ID、商品ID、商品类目ID、行为类型、时间戳。有些版本还会带上商品品牌、卖家ID等附加信息。我用的这份数据大约有几千万条记录解压后几百MB处理起来要注意内存管理。第一步是先看数据总量、字段类型、缺失值情况。这一步看似基础但能提前发现很多坑。比如时间戳字段原始数据里是Unix时间戳10位数字需要转换成可读的日期时间格式。这个转换后的时间特征后续会变成非常强力的特征——用户在一天中的活跃时段、一周中的活跃天数都能从这里挖出来。第二步是行为类型的分布统计。正常情况下浏览行为占比极高90%以上加购、收藏次之购买行为占比最低。这个分布本身就是一个很有价值的分析结论从浏览到购买的转化是一个漏斗每一步都有大量用户流失。我在实验报告里画了一张转化漏斗图从浏览到加购、加购到下单、收藏到下单、浏览到下单四个转化率一目了然。这张图在答辩时非常能撑场面。第三步是用户活跃度分析。统计每个用户的行为总数做分布直方图。你会发现大部分用户行为数很少少数重度用户贡献了大量行为。这个长尾分布特征很有价值后续特征工程里我会针对不同活跃程度的用户做分层特征。比如把用户按行为总数分为高、中、低三个活跃层级这个层级本身就可以作为一个特征也可以用来做交叉特征。1.3 内存优化与数据预处理的经验值几千万条记录在Pandas里操作内存会很紧张。我遇到的最直观问题是直接用read_csv加载内存直接飙到接近爆掉。解决办法有几个都很实用数据类型优化。把用户ID、商品ID、行为类型这类整型或字符串字段能用int32就不用int64能用category类型就不用object类型。就这一项优化内存直接砍掉一半以上。分块读取。用chunksize参数分块读入每块处理完就释放避免一次性加载全部数据。及时drop无用列。比如商品品牌、卖家ID这种对当前任务贡献不大的字段早期探索做完就可以删掉。这些方法在代码里都有对应实现实验报告里我也写了“数据预处理与内存优化”一节解释为什么要做这些优化。对大作业来说这种细节非常加分——它说明你不只会调包还懂工程实践。2. 特征工程建模好不好七分在特征这个项目也不例外特征工程是整份大作业的核心工作量所在。模型用LightGBM还是XGBoost差别不会太大但特征构造的好坏直接决定AUC能从0.7涨到0.85还是原地踏步。我在这个项目里把特征分成了四大类用户基础行为特征、时间维度特征、商品与类目维度特征、高阶交叉特征。2.1 用户基础行为特征最朴素也最有效的一类用户维度的统计特征是整个模型的地基。具体包括用户的浏览总次数、加购总次数、收藏总次数、购买总次数。这四个数字从不同角度刻画了用户在淘宝上的活跃度和购买意愿。但只统计次数还不够更重要的是比例关系。我构造了下面几个关键比例特征加购率加购次数 ÷ 浏览次数反映用户从“随便看看”到“有点想要”的转化倾向。收藏率收藏次数 ÷ 浏览次数反映用户“先存着以后再看”的行为习惯。购买转化率购买次数 ÷ 浏览次数这是衡量用户下单意愿最直接的指标。加购后购买率购买次数 ÷ 加购次数反映用户加购之后真的有去下单的比例。这些比例特征比绝对次数更有区分度。举个例子一个浏览了100次什么都没买的用户和一个浏览了5次买了3件的用户绝对次数差异不大但购买转化率天差地别。模型需要这种区分能力。2.2 时间维度特征用户行为习惯里藏着预测力时间戳字段的价值很多初学者会忽略。我用它对每条行为日志做了时间维度拆解然后聚合到用户级别。具体做法是把时间戳转换为小时、星期几、日期三个字段。统计用户在一天中的活跃时段分布。比如某个用户大量行为集中在晚上22点到凌晨2点这个时段特征可以反映用户的生活方式。统计用户在观测窗口内的活跃天数。活跃天数越多说明用户粘性越强购买概率一般也更高。计算用户最后一次行为距离数据集截止时间的间隔。这个间隔越短说明用户最近还在活跃间隔很长说明用户可能已经流失了。间隔特征是个容易被忽视但非常强力的特征。它捕捉的是“用户活跃状态是否持续”这个信号对购买预测有直接的区分能力。我做过一个简单的单特征AUC测试单纯用“最后行为距截止时间间隔”这一个特征AUC就能到0.65左右相当能打。2.3 商品与类目维度特征换个角度看用户兴趣除了从用户角度聚合我还从商品和类目的角度做了特征。核心思路是用户喜欢的商品类目越集中购买意图通常越明确。具体构造了以下特征用户交互过的商品总数。这个数字越大说明用户逛的范围越广可能还在“比较”阶段数字越小说明用户目标明确可能很快出手。用户交互过的类目总数。同理类目越分散说明用户兴趣泛类目越集中说明用户有明确的购物诉求。用户最常交互的类目占比。计算用户交互次数最多的类目占总交互次数的比例这个比例能衡量用户兴趣的集中度。用户在热门商品上的交互占比。数据集中有些商品被很多人浏览过有些商品只有零星几个人看。用户如果集中交互热门商品说明行为模式偏向跟随大众如果偏好冷门商品说明有独特的购物倾向。这些特征看似不起眼但加入后AUC提升了大约1到2个百分点。特别是类目集中度这个特征解释性很强写报告的时候可以讲出一个很顺的逻辑故事。2.4 窗口内行为序列特征把时间切割出“近期效应”用户行为有一个很明显的规律临近预测时间点的行为预测价值更高。一个人昨天刚把商品加入购物车比一个多月前加购的用户下单概率高得多。为了捕捉这种“近期效应”我把观测窗口按时间切成了两部分前70%时间段为“历史窗口”后30%为“近期窗口”。然后分别统计用户在两个窗口内的行为次数、购买次数、加购次数并计算近期行为占比。比如“近期购买占比 近期购买次数 ÷ 总购买次数”这个比例能反映用户是否正处于购买活跃期。这个特征设计逻辑在报告里值得大书特书。它本质上模拟了现实推荐系统里的时间衰减机制比简单加一个“总行为次数”要精细得多。模型结果也验证了这一点加入近期窗口特征后AUC从0.82提升到了0.84左右。2.5 特征重要度分析哪些特征真的在起作用模型训练完成后我用LightGBM自带的特征重要度功能做了排序分析。排在前十的特征几乎被近期行为类和转化率类特征包揽。这说明什么说明用户“最近在干什么”比“历史上干过多少”更能预测“下一步会不会买”。具体排序从高到低大致是近期购买次数、购买转化率、近期加购次数、加购后购买率、最后行为距截止时间间隔、总购买次数、近期行为占比、收藏率、活跃天数、类目集中度。这个排序放在实验报告里非常有用。它证明了特征工程的每一步设计都不是拍脑袋而是有数据支撑的。答辩时老师问“你为什么构造这些特征”你就可以把这份重要度排序表拍出来一个一个解释逻辑。3. 模型构建与评估主流模型横向对比选最优而不选最贵模型选型这个环节我的原则是效果好、可解释、训练快。综合考虑之后选择了逻辑回归作为基线模型LightGBM作为主模型XGBoost作为对比模型三个模型都做同一套特征然后用AUC、F1、召回率等指标横向对比。3.1 为什么选LightGBM作为主模型LightGBM是梯度提升树框架里的后起之秀在用户行为预测这类表格数据任务上有几个天然优势第一对特征尺度不敏感。用户行为数据里有些特征数值很大比如浏览总数有些特征数值很小比如加购率逻辑回归需要做标准化树模型完全不需要。这省去了大量特征预处理工作。第二能自动处理特征交互。用户行为预测里单个特征往往不够比如“加购率高”和“近期很活跃”两个特征单独看效果一般但组合起来区分度很高。树模型通过分裂规则天然实现了这种非线性交互不需要手动构造太多交叉特征。第三训练速度快支持类别特征。LightGBM用直方图算法在大样本下训练效率远高于XGBoost的传统预排序算法还支持直接把用户ID、类目ID这类非数值特征传进去。3.2 三个模型的实验对比与结论我用同一套训练集和验证集分别跑了逻辑回归、XGBoost、LightGBM三个模型。下面是实验结果的对比模型AUCF1训练时间秒逻辑回归0.75120.42315.2XGBoost0.82760.531848.7LightGBM0.84310.559212.3逻辑回归在AUC上明显落后说明用户行为数据里特征和标签之间的关系确实存在大量非线性线性模型拟合能力有限。XGBoost和LightGBM都能达到0.82以上的AUC但LightGBM在训练时间上快了将近4倍且AUC还略高。原因在于淘宝用户行为数据量大、特征相对稠密LightGBM的直方图分裂策略在速度和效果上都有优势。3.3 类别不平衡处理与阈值选择用户购买行为是典型的稀疏事件购买用户占比通常不到10%。这会带来一个严重问题模型如果把所有样本都预测为“不购买”准确率也能到90%以上但这显然没有实际意义。我采用的策略是第一给少数类样本在训练时增加权重让模型在分裂时更关注购买用户。LightGBM里直接设置scale_pos_weight参数即可。第二在预测时不是机械地以0.5为阈值而是根据验证集F1曲线选取最佳分类阈值。最终约在0.3附近取到了最大F1。这一步很重要。实验报告里一定要写清楚因为很多学生做这类题目根本意识不到阈值调优的问题。我把不同阈值下的精确率和召回率变化曲线画了出来精准率下降、召回率上升的趋势一目了然。配合F1曲线的峰值标注这一页报告就能展示出你对模型评估的理解深度。3.4 模型结果的可视化呈现技巧模型做完只是第一步把它“讲清楚”才是拿高分的关键。我做了三张图每张图在答辩时都有明确用途第一张是ROC曲线。三个模型的ROC曲线叠加在一张图里LightGBM的曲线明显更靠近左上角AUC面积最大。这张图直观地展示了模型对比结果。第二张是特征重要度Top15的柱状图。横轴是特征名纵轴是重要度。这张图的价值在于可以把“为什么这些特征有效”和业务逻辑挂上钩。第三张是预测概率分布直方图。把验证集里正负样本的预测概率分别画成两个直方图可以看到模型对正负样本的区分程度。如果两条分布曲线重叠严重说明模型能力不足重叠越少区分越好。这张图比单纯报一个AUC数字有说服力得多。4. 实验报告写作要点同样的代码不同的报告分数差距很大老师评大作业看的是你能不能把一个完整项目讲清楚。代码能跑通只是及格线“为什么这么做”“遇到什么问题”“怎么解决的”这些思考过程的呈现才是拉开分数差距的关键。实验报告我是按照学术论文的逻辑来组织的但又比论文更强调可复现性和实操细节。4.1 一份高分实验报告的核心结构我最终的实验报告包含以下八个部分每一部分的写作要点如下一、项目背景与问题定义。这部分不要长篇大论复制淘宝的发展史直接一句话说明业务背景然后重点写清楚要解决的机器学习问题——二分类、正负样本定义、评估指标选择。二、数据说明与预处理。写清楚数据来源、字段含义、数据量级、缺失值处理和内存优化方案。遇到的具体问题和解決方法要如实写比如“原始数据有几千万条直接用Pandas读入内存不足采用分块读取和数据类型优化后解决”。三、探索性数据分析。这部分最出效果。转化漏斗图、用户活跃度分布、行为时间分布三张图加分析结论就能撑起一个大节。注意每张图下面都要有具体数据支撑的描述不能光贴图不解释。四、特征工程。把我在上面写的四大类特征逐一列出来每个特征说明构造方法和业务含义。特征重要度排序表放在一节末尾作为特征工程有效性的证据。五、模型构建与评估。模型对比表格、ROC曲线、PR曲线、精确率召回率曲线分析按顺序呈现。六、结果分析与讨论。从特征重要度出发分析“哪些因素对用户购买行为影响最大”并从业务角度给出合理解释。这部分能体现你的分析能力。七、总结与展望。总结项目成果和心得体会展望可以提出“未来可以尝试引入用户性别年龄画像特征、用RNN建模行为序列”等方向。八、附录。放核心代码片段和运行环境说明。4.2 图表规范与实验记录习惯图表质量直接影响报告的专业感。我的经验是统一绘图风格统一字体大小、统一配色方案、统一坐标轴标签格式。一组风格统一的图表放在一起整体观感会非常专业评阅人潜意识里就给高分了。另外一个习惯非常推荐训练模型的实验过程一定要留记录。每个实验的日期、用到的特征列表、模型参数、验证集AUC都记录在一个表格里。这样做的好处有两个一是写报告时素材信手拈来不用回头重跑代码二是如果老师问“你这个特征有没有试过别的做法”你能拿出实验记录证明你试了很多方案最终选了最优的那个。在报告里放一张实验记录表哪怕只是附录里一小节老师看到“做了这么多组对比实验”认可度会显著提升。4.3 答辩前重点准备的问题清单答辩环节老师最爱问的问题提前准备好答案为什么用AUC不用准确率回答思路正负样本不平衡准确率没有区分度AUC只看排序能力不受阈值影响。这个特征怎么想到的回答思路从业务逻辑出发比如加购率是因为“加购代表明确购买意向”。数据泄露问题怎么避免回答思路时间切分训练集只用过去数据预测未来。模型怎么调的参回答思路先粗调学习率和树数量再细调树的深度和叶子节点数用早停机制防止过拟合。这个项目如果上线有什么改进空间回答思路引入用户画像特征、行为序列建模、在线学习实时更新模型。5. 完整代码实现从数据加载到模型评估的全流程项目代码整体按模块化组织文件结构清晰每个部分都能独立运行和调试。实验报告和源码对应关系明确如果是参考这个项目来完成作业建议先把自己手头数据集的字段名对照清楚然后按模块替换即可。5.1 项目文件结构一览taobao_user_behavior/ ├── data/ # 数据目录 │ └── user_behavior.csv # 原始行为日志数据 ├── code/ │ ├── 01_data_preprocess.py # 数据预处理与内存优化 │ ├── 02_eda_analysis.py # 探索性数据分析与可视化 │ ├── 03_feature_engineering.py # 特征工程全流程 │ ├── 04_model_train_eval.py # 模型训练与评估 │ └── 05_result_analysis.py # 结果分析与特征重要度 ├── reports/ │ ├── 实验报告.md # 完整实验报告 │ └── 实验报告.pdf # PDF版本 └── output/ ├── figures/ # 可视化图表输出目录 ├── features/ # 特征工程中间结果 └── models/ # 训练好的模型文件5.2 数据预处理模块的关键代码逻辑import pandas as pd import numpy as np from datetime import datetime # 分块读取处理大文件内存不足问题 chunk_size 1000000 chunks [] for chunk in pd.read_csv(data/user_behavior.csv, chunksizechunk_size, dtype{user_id: int32, item_id: int32, category_id: int32, behavior_type: category, timestamp: int64}): chunks.append(chunk) df pd.concat(chunks, ignore_indexTrue) # 时间戳转换为可读时间并提取时间维度特征 df[datetime] pd.to_datetime(df[timestamp], units) df[hour] df[datetime].dt.hour df[weekday] df[datetime].dt.weekday df[date] df[datetime].dt.date # 过滤异常数据行为类型不在合法范围、时间戳缺失等 df df[(df[behavior_type].isin([pv, cart, fav, buy]))] df df.dropna(subset[user_id, item_id])这里有几个细节值得说。读文件时显式指定dtype能在加载阶段就把内存占用降下来。时间戳用units参数直接转datetime比先建列再循环转换效率高好几个数量级。行为类型用category类型存后续做groupby统计时会快很多。5.3 特征工程模块的核心函数实现def generate_user_features(df, split_time): 生成用户维度特征 split_time: 观测窗口分割时间点用于区分历史窗口和近期窗口 # 基础行为统计 user_feat df.groupby(user_id).agg( total_pv(behavior_type, lambda x: (x pv).sum()), total_cart(behavior_type, lambda x: (x cart).sum()), total_fav(behavior_type, lambda x: (x fav).sum()), total_buy(behavior_type, lambda x: (x buy).sum()), active_days(date, nunique), total_items(item_id, nunique), total_categories(category_id, nunique) ).reset_index() # 转化率特征 user_feat[cart_rate] user_feat[total_cart] / (user_feat[total_pv] 1) user_feat[fav_rate] user_feat[total_fav] / (user_feat[total_pv] 1) user_feat[buy_rate] user_feat[total_buy] / (user_feat[total_pv] 1) # 近期行为特征 recent_df df[df[timestamp] split_time] recent_feat recent_df.groupby(user_id).agg( recent_pv(behavior_type, lambda x: (x pv).sum()), recent_cart(behavior_type, lambda x: (x cart).sum()), recent_buy(behavior_type, lambda x: (x buy).sum()) ).reset_index() user_feat user_feat.merge(recent_feat, onuser_id, howleft) user_feat user_feat.fillna(0) return user_feat特征工程的代码核心在于groupby加agg的组合操作。所有用户维度特征都在一次groupby内完成聚合避免多次遍历数据性能上更优。lambda函数里判断行为类型做条件计数比先筛选再groupby要简洁得多。5.4 模型训练与调参模块import lightgbm as lgb from sklearn.model_selection import train_test_split from sklearn.metrics import roc_auc_score, f1_score, precision_recall_curve # 数据集划分按时间顺序切分训练集和验证集 train_size int(len(features) * 0.8) X_train, X_val features[:train_size], features[train_size:] y_train, y_val labels[:train_size], labels[train_size:] # LightGBM模型正负样本不平衡时调整权重 model lgb.LGBMClassifier( n_estimators500, learning_rate0.05, num_leaves31, max_depth-1, min_child_samples20, subsample0.8, colsample_bytree0.8, scale_pos_weight10, # 正负样本权重比 random_state42 ) # 训练时使用早停防止过拟合 model.fit( X_train, y_train, eval_set[(X_val, y_val)], eval_metricauc, callbacks[lgb.early_stopping(50)] ) # 预测与阈值调优 y_pred_proba model.predict_proba(X_val)[:, 1] precisions, recalls, thresholds precision_recall_curve(y_val, y_pred_proba) f1_scores 2 * (precisions * recalls) / (precisions recalls 1e-9) best_threshold thresholds[np.argmax(f1_scores)] y_pred (y_pred_proba best_threshold).astype(int) # 输出评估指标 auc_score roc_auc_score(y_val, y_pred_proba) f1 f1_score(y_val, y_pred)模型训练模块这部分有几个调参经验要分享。scale_pos_weight参数设置为正负样本比的近似值这里是10左右能有效缓解样本不平衡。早停轮次设为50既防止过拟合又不至于提前停止导致模型欠拟合。学习率设0.05配合500棵树是一个比较稳妥的组合模型效果不错且训练时间可控。5.5 可视化出图模块import matplotlib.pyplot as plt import seaborn as sns plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False # 行为转化漏斗图 action_order [pv, cart, fav, buy] action_counts [df[behavior_type].value_counts()[a] for a in action_order] plt.figure(figsize(10, 6)) plt.bar(action_order, action_counts, color[#2E86AB, #A23B72, #F18F01, #C73E1D]) plt.title(用户行为转化漏斗) plt.xlabel(行为类型) plt.ylabel(行为次数) plt.yscale(log) # 浏览和购买数量级差异大用log刻度更清晰 plt.show()可视化这块有个细节行为次数数量级差异非常大浏览可能是百万级购买只有几千直接用普通坐标轴画图购买那一根柱子几乎看不见。用log坐标轴就能在一张图里展示完整的漏斗结构。这类细节问题写报告时如果图做得专业老师一眼就能看出来你下了功夫。6. 复盘与避坑指南做完整个项目这几个坑最值得说整个项目从头到尾做下来踩过的坑、走过的弯路不少。最后把这几个最典型、最有参考价值的经验整理出来希望能帮后面做同类题目的同学省点时间。6.1 时间戳处理不当导致的时间偏移最开始处理时间戳我直接按默认时区转换结果发现所有行为时间都比实际快了8个小时。原因很简单淘宝数据集的Unix时间戳是UTC时区而我们在东八区转换时要加上时区偏移。这个问题如果不修正后面所有的时间维度特征比如“凌晨活跃用户”全是错的。验证方法是随机抽取几条已知购买记录对照商品详情页显示的购买时间确认转换后的时间是否一致。这个校验步骤虽小但能避免整个项目的数据基础出错。6.2 groupby操作内存溢出的规避方案特征工程阶段我一开始把所有特征都放在一个超级大的groupby里做结果内存直接爆掉。后来改成两步走的策略先把用户ID、行为类型做小规模的groupby得到基础计数再把这些聚合结果合并到主表。用merge方式合并小的特征表比在大DataFrame上反复做transform要节省大量内存。另一个技巧是及时del掉不再使用的大对象配合gc.collect()强制释放内存。Python的垃圾回收机制有时候不够积极在Notebook里跑大任务时会感觉到内存占用只增不减手动触发回收能有效缓解。6.3 验证集AUC高但不代表真实的参考价值训练完成时我在验证集上的AUC到了0.84看着很不错。但冷静下来分析这个数字里有多少是特征工程真实贡献的有多少是数据划分方式带来的乐观偏差我做了个对照实验只保留用户ID这一列不加工任何业务特征直接训练LightGBM。结果AUC竟然也有0.72。这说明用户ID本身携带了大量信息——因为购买行为有很强的用户个体差异性有些用户就是比另一些用户更容易买东西。这个对照实验放在报告里很有价值它说明特征工程确实在用户ID信息之上又叠加了有效信息而不是单纯靠个体差异撑起来的AUC。6.4 实验结果存档的习惯价值做模型实验时我给每个实验单独建了文件夹里面放三样东西实验代码、模型输出指标、预测结果文件。实验命名按“日期_版本号_特征集描述_模型名”的格式比如“20231215_v2_加入近期窗口特征_lightgbm”。这样过两天再回来看看到文件名就能想起当时做了什么改动。这个习惯在项目后期尤其重要。当你发现模型效果不升反降需要回退到之前的某个版本时有存档就能快速定位。6.5 关于参考源码和报告的一个靠谱姿势最后说说这份源码和报告怎么用最有效。如果只是照着重跑一遍收获很有限。我建议拿到手之后先通读实验报告理解每个环节背后的逻辑再动手运行代码运行时对照报告看每段代码在实现报告里的哪个结论。跑通之后做三件事能大幅加深理解第一件换一个目标变量。比如把“是否购买”换成“是否加购”看看模型效果有什么变化特征重要度排序又有什么变化。第二件删掉某一组特征重新训练。比如删掉所有近期窗口特征看AUC掉多少。这个对比实验能帮你感知每组特征对模型贡献的真实大小。第三件自己重新实现一遍特征工程不参考源码写完之后和源码对比看有没有遗漏的重要特征有没有冗余的重复特征。这一步做完这个项目基本就内化成你自己的能力了。本文还有配套的精品资源点击获取
返回列表