ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

周末改了AutoML提示词,周一推荐系统把冷门当爆款:靠机器学习入门才止损

2026/9/9 22:43:54 拓冰建站 浏览量
周末改了AutoML提示词,周一推荐系统把冷门当爆款:靠机器学习入门才止损 周末改了AutoML提示词,周一推荐系统把冷门当爆款:靠机器学习入门才止损周五下班前我改了一组 AutoML 的任务描述提示词,心想不就是用自然语言告诉 SageMaker Autopilot “预测用户会点击哪个商品”吗,多写几句业务规则就稳了。周一早上打开 A/B 报表,推荐点击率跌了 15%,个性化推荐位几乎全被冷门商品占满,运营群里直接炸了。我盯着那几行提示词工程改动的 commit,手心出汗--原来提示词工程根本不是多写一些“精准匹配”“协同过滤倾向”就能收工的,它背后需要一套完整的数据理解和机器学习基础。那一刻我才下定决定,不能再靠碎片文档拼拼凑凑了,必须补一门能讲清从数据到模型全链路的课程。后来我在同事的推荐下开始看机器学习入门这门课,它把数据预处理、特征工程、模型选择和评估的整个流程用实际项目串讲了一遍。尤其里面关于如何把业务问题转换成 AutoML 能理解的任务描述,这部分直接对上了我的翻车现场。如果那时我搞懂了提示词工程和底层模型能力的关系,就不会写出那一组把评分稀疏的商品强行推上位的提示词了。为什么敢在没数据科学家的情况下硬上推荐系统我们是个不到 8 人的电商工具团队,后端、前端、运营都有,唯独缺一个懂算法的角色。年初老板下了目标:首页“猜你喜欢”要在一个月内上线,预算只够买云资源,招人是完全不可能的。我翻了一圈文档,发现 SageMaker Autopilot 正好打在这个痛点上--上传 CSV,写好目标列,它就能自动做特征工程、自动选算法、自动调参。当时觉得这就是给小白用的神器,连提示词工程都似乎变简单了,因为 Autopilot 只要求填一个“problem description”。现在回想,那个“problem description”本来就是提示词工程的主战场,只是我当时把它当成备注栏随便写了两句。我的第一次 Autopilot 实验,数据是近一个月的点击和下单日志,目标列设为「是否下单」。提示词我写的是“预测用户可能购买的商品”。结果训练了 6 个小时,出来的模型在测试集 AUC 只有 0.67,线上效果几乎等于随机。我以为是数据量不够,于是补了两个月历史日志,重跑。第二轮模型的 AUC 掉到 0.64。这时我开始怀疑方向是不是错了,但没人能一起排查。一位朋友建议我先别看模型,回去检查一下数据预处理的步骤。那时候我连数据预处理的标准流程都说不全,更不知道缺失值填充、类别编码对 AutoML 的影响有多大。把提示词工程当“备注”写的后果第一版提示词工程我只写了 23 个字。Autopilot 根据这 23 个字,自动构建了特征交叉、embedding 宽度、树模型深度这些超参的搜索空间。我以为写长了会限制它,结果恰恰相反,给的业务规则越模糊,它对超参调优的方向就越散。上线后我才发现,模型把“最近有收藏但没下单的商品”当成了强正向信号,因为这些商品在训练数据里出现的次数少但下单率相对高--典型的稀疏数据过拟合。我补看机器学习基础课程时,有一节专门讲如何处理样本不均衡和稀疏特征,里面提到当正样本稀少时,模型容易把噪声学成规则。这段内容让我后脖颈一凉:这和我踩的坑一模一样。补完那部分后,我重新设计了自己的提示词工程框架:先根据业务逻辑圈定正样本的定义、再限定用户行为序列的时间窗、最后说明模型应该优先泛化能力还是精准度。新的提示词不止是一段话,而是一套结构化的需求文档。我把这个思路套用在第二版 Autopilot 实验里,同时用学到的特征工程方法,手动构造了“用户近 3 天点击品类频次”“商品近 7 天被下单率”两个特征列并一起上传。# 用 pandas 构造两个强业务特征 import pandas as pd # 读取原始点击流 df pd.read_csv(click_log.csv) # 特征1: 用户最近3天对每个品类的点击次数 df[user_cate_3d_clicks] df.groupby([user_id, category])[timestamp].transform( lambda x: (x.max() - x).dt.days.le(3).sum() ) # 特征2: 商品近7天被下单的比例 df[item_order_7d_ratio] df.groupby(item_id)[is_order].transform( lambda x: x.rolling(7D, ondf[timestamp]).mean() )配合改进后的提示词工程,Autopilot 第二次训练只用了 4 小时,验证集 AUC 直接拉到 0.82。但我心里没底,因为线上和离线是两个世界。周一上线那天,我差点把回滚按钮按烂灰度放出 10% 流量后,推荐点击率的实时指标起初是微涨的,但不到一小时就开始下探。我打开推荐日志,发现大量用户被推了同一个冷门品类,而且是那种库存只有个位数的商品。运营截图发到群里问:“这个推荐是认真的吗?”我顾不上解释,直接切回旧策略,同时赶紧查原因。根因很快就浮出来了:我在提示词工程里为了追求“新颖性”,加了一句“尽可能推荐用户过去没看过的商品”。Autopilot 把这条解读成了一个强约束,在排序阶段给冷门商品加了极大的权重。可问题在于,我的训练数据里,这些冷门商品因为曝光极少,根本没有足够的行为样本支撑预测,模型实际上是在凭随机波动做推荐。这个时候,机器学习入门课程里关于「过拟合」和「数据漂移」的章节又救了我。课程用了一个电商推荐的例子讲解为什么训练集里的冷门商品在线上表现会远差于验证集,因为它本质上是在学习一种与未来分布不一致的模式。我立刻意识到,之前我通过特征工程加的那几个窗口特征,虽然提升了离线 AUC,但也在无意中放大了头部商品的信号,让模型对冷门商品的预测更不稳定。于是我紧急做了一轮离线回放,用上周的数据作为测试集,模拟如果去掉那条“新颖性”提示、同时把窗口特征做一阶差分,模型的效果是升还是降。结果让我舒了一口气:去掉新颖性提示后,Top-10 推荐里的冷门商品占比从 43% 降到了 11%,但整体点击率预估没有明显恶化。这说明原来那个版本的提示词工程确实在帮倒忙。重新设计提示词:从一句话变成一套规则后面两周,我彻底把提示词工程当成了一个正式的设计环节。我先打开机器学习入门课程里的“定义业务问题”那一节,跟着课程把电商推荐问题拆解成三个子目标:提高点击、提高加购、提高转化。然后以这三个子目标分别构建三组提示词,再用 Autopilot 生成三个模型,最后在应用层做加权合并。# 用 SageMaker SDK 启动三个 Autopilot 实验,分别对应不同子目标 import boto3 from sagemaker import AutoML autopilot AutoML( target_attribute_nameclick_label, problem_typeBinaryClassification, output_paths3://my-bucket/autopilot-click/, roleSageMakerRole, max_candidates5, max_runtime_per_training_job_in_seconds1800, problem_description预测用户是否会点击商品,优先保证召回的多样性,不要过度惩罚冷门品类但控制冷门占比在 15% 以内 ) # 类似方式可以创建加购和转化目标的实验这段代码里的 problem_description 就是我重新设计的提示词工程结果。它把之前模糊的“新颖性”换成了可量化约束“控制冷门占比在 15% 以内”。Autopilot 在超参搜索时就会自动偏向那些不会把冷门商品排太高的模型结构,而不是硬生生加一个权重。此外,我还用混淆矩阵重新评估了模型效果。之前的评估报告只看了 AUC,后来学了机器学习入门才知道,对于推荐系统这种正负样本极度不均衡的场景,精度、召回率和 F1 比 AUC 更能反映线上表现。我特意写了一小段脚本导出混淆矩阵并计算 Top-N 准确率。# 用 sklearn 计算混淆矩阵和推荐命中率 from sklearn.metrics import confusion_matrix, precision_score, recall_score y_true test_df[is_click] y_pred model.predict(test_df[features]) cm confusion_matrix(y_true, y_pred 0.5) precision precision_score(y_true, y_pred 0.5) recall recall_score(y_true, y_pred 0.5) print(fConfusion Matrix:\n{cm}) print(fPrecision: {precision:.3f}, Recall: {recall:.3f})从翻车中学到的提示词工程四原则这次事故之后,我把自己在机器学习入门学到的知识和实际踩过的坑总结成了四条提示词工程设计原则,现在团队里其他同事要开 AutoML 实验前,都必须先按这四条过一遍。先定义数据分布再写提示词。如果不知道自己训练数据的样本构成、正负比例、特征缺失率,写出来的提示词工程就可能是盲人摸象。机器学习基础课程里讲的数据探索性分析,是写提示词前必做的步骤。用可量化的约束替代形容词。“多一些新颖性”这类词对 Autopilot 没有意义,必须换成“冷门商品曝光占比不超过 15%”或“Top-20 里需包含至少 3 个用户历史品类”。这种转换能力,正是提示词工程这门课会专门训练的。离线评估必须看业务指标。AUC 参考价值有限,推荐系统一定要看 Top-N 的命中率和覆盖率。机器学习入门课程里用实际项目演示了如何构建贴合业务的评估体系,这一部分让我少走了很多弯路。用 A/B 实验验证而不是靠直觉上线。哪怕提示词写得再完美,上线前也必须走灰度和小流量对比。我这次如果不是只开了 10%,全量上线可能会引发大规模用户投诉。给同样没数据科学家的技术团队如果你也面临人力有限但被要求快速上线机器学习功能的处境,我的建议是别一开始就扎进 SageMaker Autopilot 的配置界面,而是先花一周时间把机器学习入门从头到尾过一遍。它不会把你变成算法大牛,但足以让你理解一个推荐系统从数据到上线可能会在哪些环节翻车。之后再去碰 AutoML,尤其在设计提示词工程时,你才会知道每一句话背后的模型行为边界。我后来甚至把我们团队的提示词工程模板放进了 Confluence,所有人都可以按照结构化的方式填写业务目标、数据约束和评估标准,而不是像我最开始那样拍脑袋写。说到底,提示词工程是连接业务意图和模型能力的桥梁。没有机器学习基础和特征工程的底子,这座桥很容易在周一凌晨断掉,就像我的第一次上线那样。如果现在再让我选一次,我会在启动 Autopilot 实验的同时就打开亚马逊云科技机器学习的相关课程,一边跑实验一边对照课程里的工程化清单,至少能帮我把翻车概率压到一半以下。这门课不止讲算法,也把机器学习管道的编排、特征存储的选择、数据漂移的监控这些上线后才会疼的问题提前给到了参考答案。对我们这种完全没有运维经验的小团队来说,这些内容比模型本身更重要。最后分享一个我从课程里学到的习惯:每次训练完模型,我都会顺手生成一份模型可解释报告,用 SHAP 看一下 top 特征,确保没有奇怪的信号主导预测。这一个动作就帮我拦截过两次因为时间穿越导致的特征泄露。如果你现在也正准备用 AutoML 做推荐系统,不妨从深度学习入门课程最后那节“模型部署前检查清单”开始看起,能省掉很多线上回滚的心理阴影。