尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

发版当天推荐系统崩了:我把强化学习当万能药,直到补完 AWS 基础知识才清醒

发版当天推荐系统崩了:我把强化学习当万能药,直到补完 AWS 基础知识才清醒 发版当天推荐系统崩了:我把强化学习当万能药,直到补完 AWS 基础知识才清醒发版那个下午,推荐系统上线三小时后,监控大屏上的点击率曲线直接掉到了平时的三成。我紧急把版本滚了回去,然后对着 Q-table 一脸茫然:用强化学习训练了两周的推荐策略,在真实流量面前连随机策略都打不过。这已经不是第一次翻车。之前我用无监督聚类做商品推荐,结果把猫粮推给了养狗的用户,被运营在群里点名。这两次教训让我意识到,我根本没有搞懂监督学习、无监督学习、强化学习到底该怎么选。直到我花时间学完AWS 基础知识这门课,才看清问题的本质:不同业务场景对应不同的学习范式,选错的代价远比重新训练一个模型大得多。这门课用 AWS 的视角帮我理清了映射关系,现在接到新需求,我五分钟就能画出决策树,判断该用哪类算法。为什么我一开始选了强化学习?这个推荐项目启动时,产品经理只说了一句:“要能根据用户实时行为动态调整推荐结果。”我脑子里立刻冒出“强化学习”四个字--智能体在环境中不断试错,根据用户点击获得奖励,听起来完美契合。之前我看过人工智能入门这门课,里面提到强化学习适合序列决策问题,比如下棋、自动驾驶。我当时只记住了“序列决策”这个词,却没有注意到课程里反复强调的约束条件:奖励信号必须足够稠密、反馈延迟要短。这门课其实已经给出了选择范式的决策框架,但我走马观花,错过了最关键的那张矩阵图。实际环境中,用户点击是极其稀疏的,一次推荐要隔几个小时才可能产生一个奖励,而且用户的点击动机复杂,奖励带有大量噪声。训练两周后,Q 值函数完全没有收敛,策略一直在一个低水平震荡。当时我以为强化学习只是调参不到位,加了 epsilon 衰减、调整了折扣因子,但本质上是在用错误的方法解决错误的问题。无监督聚类的第二次尝试同样惨败既然强化学习走不通,我就退回到更简单的方案:用无监督学习对商品做聚类,同一簇内的商品推荐给买过该簇商品的用户。这个思路来自机器学习入门这门课里一个关于客户分群的案例,但案例的适用边界是“没有用户交互数据、仅依赖静态特征”的场景。我明明有几十万条点击流数据,却硬是把有监督问题降级成了无监督。我用 KMeans 把商品按标题、类目和价格聚成 32 个簇,上线后发现推荐精度一塌糊涂。事后我用机器学习基础课上讲的混淆矩阵分析了一次推荐日志--把用户真实点击看作正例,聚类推荐看作预测,得到的准确率只有 0.11,还不如直接推荐热销商品。# 事后用混淆矩阵复盘聚类推荐的效果 from sklearn.metrics import confusion_matrix, classification_report y_true clicks_df[user_clicked] # 用户是否点击 y_pred clicks_df[cluster_recommended] # 聚类是否推荐了该商品 print(confusion_matrix(y_true, y_pred)) # 输出: # [[8234 1566] # [ 912 88]] # 准确率 (823488) / 总样本 0.83? 不是,正类几乎全错 print(classification_report(y_true, y_pred)) # precision recall f1-score support # 0 0.90 0.84 0.87 9800 # 1 0.05 0.09 0.07 1000 # 真正类的召回率只有 9%,模型几乎没有学到任何有用模式看着这份报告,我明白自己犯了一个根本性错误:把一个有强监督信号的问题,硬生生套上了无监督的壳。但当时的我并不知道,到底什么场景才适合无监督学习。问题到底出在哪?我翻出了 AWS 基础知识的决策树在连续翻车之后,我决定暂时停下所有训练任务,系统地把基础补一遍。同事建议我先看看AWS 基础知识这门课,因为里面有一节专门讲“如何根据业务目标选择 ML 范式”。我用了两个周末把整套课程过完,终于找到了我一直在找的那张决策树。AWS 基础知识这门课不是从数学公式讲起,而是从企业级云上 ML 的视角,把问题类型映射讲得非常清楚。它把选择范式拆成四个维度:是否有可用的标注数据?(数据标注成本)是否需要实时与环境交互?(反馈延迟)目标是预测值、分类还是序列决策?(问题类型)模型的可解释性要求有多高?(业务约束)对照这个框架,我的推荐系统场景一下子明朗了:有大量历史点击日志作为标注样本,不需要实时与环境交互,目标是预测用户点击概率--这根本就是一个经典的监督学习问题。AWS 基础知识课程中还有一个真实电商案例,和我的场景几乎一模一样,他们最终选用了协同过滤加轻量级梯度提升树,CTR 提升了 35%。我按照课程里的决策树画了一张自己的选型图谱,贴在了工位上。从那以后,每次接到新需求,我都先走一遍这四个维度,再也没有出现过范式选择错误。用机器学习基础补上评估与特征工程短板选对了范式,剩下的就是工程落地了。我重新回到机器学习基础这门课,把之前跳过的特征工程、数据预处理和模型评估章节认真过了一遍。这门课的价值在于它完整覆盖了从数据到模型的管道,特别适合我这种半路出家、急于上线的人。我用课程中讲的特征交叉方法,把用户历史行为和商品属性做了组合特征,同时按照机器学习基础中关于数据漂移的章节,建立了一套离线评估与在线监控机制,防止后续分布变化导致模型衰减。# 使用特征交叉构建新特征 import pandas as pd from sklearn.preprocessing import LabelEncoder # 将用户类目偏好与商品类目做交叉 user_item[cat_cross] user_item[user_fav_category].astype(str) _ user_item[item_category].astype(str) # 标签编码后作为新特征 le LabelEncoder() user_item[cat_cross_enc] le.fit_transform(user_item[cat_cross]) # 课程中学到的:交叉特征能捕捉到单变量无法表达的交互信息在评估阶段,我严格按照机器学习基础课程推荐的流程,用分层抽样划分训练集和测试集,并重点关注精确率与召回率的平衡,因为推荐场景下假阳性会直接影响用户体验。深度学习入门和 CodeWhisperer 助攻调试效率特征到位之后,我准备尝试用深度神经网络来拟合更复杂的交互关系。这时我打开了深度学习入门这门课,跟着里面的 PyTorch 实战章节,搭了一个简单的全连接网络,输入层包括用户、商品和上下文特征,输出层是一个 sigmoid 单元做 CTR 预估。在编写训练循环时,CodeWhisperer帮我省了至少一半的代码量。它会根据函数名和注释,自动补全 DataLoader 配置、优化器选择和训练验证循环,我只需要专注于网络结构和超参设置。一次调试中,我写了一个自定义损失函数的注释,CodeWhisperer直接生成了完整的 Focal Loss 实现,比我手写还规范。# CodeWhisperer 根据注释补全的 Focal Loss def focal_loss(y_pred, y_true, alpha0.25, gamma2.0): 计算 Focal Loss,用于处理类别不平衡问题 import torch import torch.nn.functional as F ce_loss F.binary_cross_entropy(y_pred, y_true, reductionnone) p_t y_pred * y_true (1 - y_pred) * (1 - y_true) alpha_factor y_true * alpha (1 - y_true) * (1 - alpha) modulating_factor (1.0 - p_t) ** gamma loss alpha_factor * modulating_factor * ce_loss return loss.mean()深度学习入门课程还教了如何用早停和学习率衰减来防止过拟合,我在训练时直接应用,把验证集的 logloss 从 0.68 压到了 0.52。新的监督学习模型,上线后点击率提升 44%经过范式修正、特征优化和模型升级,新的推荐系统在离线测试中表现稳定。我用机器学习基础里学到的混淆矩阵和 PR 曲线做了充分评估,确保召回率达到 48%、精确率 32% 才提交上线。发版当天,我特意选择了流量低峰时段,灰度开放 10% 的流量。监控显示点击率从旧版的无监督方案的 2.1% 提升到了 3.02%,相对提升 44%,而且推荐相关性显著提高,运营反馈投诉量降到几乎为零。这次经历让我彻底明白了基础的重要性。如果当初我没有停下来去系统学习AWS 基础知识和机器学习基础,我可能还在 Q-table 里调衰减因子,或者在聚类簇数上反复试验,而真正的根因一直埋在那里。我的学习建议清单如果你也在 AI 学习的路上遇到各种选型困惑,下面几条是我用真实项目教训换来的建议:先画问题类型矩阵,再选算法:接到需求时,立刻判断是否有标注数据、反馈延迟、目标是预测还是决策。这个流程在AWS 基础知识课程里有现成的模板,值得点进去核对一遍。不要用深度学习解决所有问题:先尝试简单的基线模型,比如逻辑回归或 GBDT,再用深度学习入门去挑战复杂模式。课程里的项目递进设计能帮你建立正确的选型习惯。把评估指标刻进日常开发:混淆矩阵、精确率、召回率这些不该只是面试题,而应该成为你每次提交模型时必须输出的附件。机器学习基础这门课把评估讲得特别实操,学完就能直接落地。利用工具提升编码效率:如果你在写数据预处理或模型评估脚本,可以试试CodeWhisperer,它会自动补全大量样板代码,让你把精力留在算法逻辑上。从全景入门开始,再深入分支:如果你是转行或刚接触 AI,先通过人工智能入门建立起领域全景,知道监督、无监督、强化的边界在哪里,再去深入具体技术,可以避免我这种盲目跳坑。现在回头看,那个点击率暴跌的下午并不算坏事。它逼着我停下来,把那些本该在一开始就搞懂的基础,通过AWS 基础知识、机器学习基础和深度学习入门一门一门地补了回来。如果你也在为选型发愁,别急着调参,先去把基础扎牢,回报可能比你想的大得多。
返回列表