1. 背景
公共云某大客户主营出海的投资业务,分析师以获取最大收益为目标,对不同业务投资渠道进行预算分配。本文提出AI大模型结合机器学习算法的技术方案,对不同投资渠道进行预测,减少分析师工作量,未来更是做到自动化分析优化,直接给资金方进行服务,做到网页信息采集投前分析,投后优化全链路优化。项目具备一定的行业通用属性,能够基于历史数值结合大模型在预测领域带来通用的解决方案。本文经过脱敏后,省略许多技术细节,仅保留了一些关键步骤。
从24年12月开始启动项目,共为客户提供3版解决方案,从纯大模型预测到引入机器学习+大模型的方式,目前项目处于关键落地阶段,上线后预估日调用量超百万,能够缓解客户80%的人力压力,同时为资金方带来自主可控的全链路投放优化智能辅助方案,在投资领域为资金方、业务平台、业务供应商带来3方的共赢。
2. 业务投资方案
2.1 第一版:大模型预测
客户对大模型在投资领域的能力非常有信心,提供了部分样例数据进行POC,我们以提示词工程为核心,让大模型学习投资收益的历史数据,并结合分析师的操作习惯产生结果。在客户提供的样例数据中取得了不错的效果。以下为部分提示词示例:
### ⻆⾊ 你是⼀位***投资领域的分析师 ### 任务 主要职责是根据⽤户给定7天的历史数据,输出第8天投资的预算。你需要核⼼关注的是过去每天的变量A、变量B以及变量...,根据变量的⾛势给出第8天合理的预算 ...... ...... ...... ### 约束 - 当你发现⽤户输⼊数据中的预算增加,变量A降低,你应该适当减少预算;如果预算增加,变量A增加,你应该增加预算。核⼼⽬的是保证每次成本(预算/变量A)保证在⼀个合理的变动范围 - ...... - ...... - ...... ### 输出格式 预算:xxx 元
- 第1天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ... - 第2天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ... - 第3天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ... - 第4天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ... - 第5天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ... - 第6天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ... - 第7天, 参考权重占⽐**%, 预算: **, 变量A: **, 变量B: **, ...
2.2 第二版:局部加权线性回归算法+大模型预测
本次客户换成了较为理想状态下的真实数据,包含了20余项变量,这就导致单纯使用提示词工程难以学习到如此多属性的数据,并且每个excel都有上万条数据。但大模型无法学习到如此多数据之间的数学关系并不擅长数据的计算,我们对提示词多次调优也无法达到预期效果,因此我们决定引入局部加权线性回归算法,使用该算法预测出未来每一天的总预算,再对每个投资渠道进行预算分配。
局部加权线性回归原理
局部加权线性回归是一种非参数学习算法,其核心原理是通过动态赋权机制为不同训练样本分配不同的权重,使模型在预测时更关注查询点附近的局部数据特征。具体实现原理如下:
1.权重计算
对查询点 ,使用高斯核函数为每个训练样本 赋予权重:
其中超参数 k 控制权重衰减速率:k 越小,衰减越快,模型更关注邻近点;k 越大,衰减越慢,模型趋近全局线性回归。
2.加权损失函数
目标是最小化加权均方误差:
距离查询点近的样本对损失函数影响更大。
3.闭式解
通过矩阵运算直接求解最优参数
其中 W 是对角权重矩阵,
4.预测输出
数据分析
使用局部加权线性回归算法进行预测:
以3天作为滑动窗口求均值后,局部加权线性回归预测的值(红色)与实际值(绿色)的比较。
以7天作为滑动窗口求均值后,局部加权线性回归预测的值(红色)与实际值(绿色)的比较。
以30天作为滑动窗口求均值后,局部加权线性回归预测的值(红色)与实际值(绿色)的比较。
算法思想
使用局部加权线性回归算法预测出新的整体预算之后,接下来就是如何将预算分配到各个投资渠道上。通过计算每个渠道收益的贡献度,可以有效地进行投资额的分配。这个贡献度可根据渠道历史N天数据计算,它与渠道收益金额成正比,与渠道投资金额成反比,且所有渠道的贡献度之和要为100%。将统计信息和趋势信息给到大模型进行分析、推理和总结。本方案在客户提供的数据上取得了不错的效果。以下为部分提示词实例:
### ⻆⾊ 你是⼀位**投资分析师,职责是根据不同渠道的历史效果数据给出今⽇的预算调整建议。 ### 任务 给出当前的统计数据: - 投资效果的KPI...... - 投资效果的基准值...... - 投资整体数据。包括投资整体的当前预算,单位收益的成本均值,整体收益变化⽐例...... - 每个渠道详细数据。包括渠道的当前预算, 单位收益的成本均值,收益变化⽐例,单位收益的成本差异⽐例...... 在满⾜原则的情况下,给出每个渠道和整体的预算调整动作(增加预算或者减少预算)和具体调整幅度的建议 ### 原则 在分析每个渠道的过程中,你必须依次检查并遵循以下所有原则: 1. 优先确保整体效果达成KPI,...... 2. 投资整体预算增幅不超出当前预算的*% 3. 先计算整体预估预算,公式为:********** 4. 再根据每个渠道的⽇均贡献⽐例计算每个渠道的新预算,公式为:**********
2.3 第三版:XGBoost+大模型预测
随着方案的演进,客户本次提供了完全真实的数据,其中很多数据都是缺失的,因此依靠当前投入和收益计算的收益成本已不足以准确地预测未来的投资,我们观察到数据中除了投资和收益之外,还有很多有用的信息例如:影响力、购买数、分享数等二十余项有用信息,这些信息在投资方面中也起到了重要的作用,甚至我们可以把对某个渠道当天的投资作为自变量,而收益、影响力等二十余项指标就是因变量。反过来,也可以把前一天的收益、影响力等二十余项指标看作自变量,而第二天的投资额就是因变量。
因此,我们可以把问题抽象为根据前一天的各种影响因子,来预测第二天的投资额。考虑到本次提供的数据量已经非常大了, 每个excel都有超过20w条数据,且特征如此多的情况,我们在对数据处理后,采用了XGBoost机器学习模型进行单个投资渠道的投放值的初步预测。
XGBoost算法原理
XGBoost的原理基于梯度提升框架,通过集成多棵决策树实现高性能预测。其核心机制包含以下要点:
1.目标函数优化
目标函数由损失函数和正则化项组成:
其中,损失函数 (如均方误差) 衡量预测偏差,正则化项 控制模型复杂度, 为叶子节点数, 为节点权重,防止过拟合。
2.二阶泰勒展开
对损失函数进行二阶泰勒展开近似,保留一阶梯度 和二阶导数 ,目标函数简化为:
通过此方法提升计算效率与优化精度。
3.树结构学习
- 分裂准则:使用贪心算法选择最优特征和切分点,依据分裂增益:
增益最大且超过阈值时分裂。
- 叶子权重计算:最优权重由闭式解确定:
其中 为叶子节点 的样本集合。
4.关键优化特性
- 正则化:通过L1/L2正则化及叶子节点数限制降低过拟合风险;
- 二阶导数信息:相比GBDT仅用一阶梯度,XGBoost引入二阶导数加速收敛并提升精度;
- 工程优化:包括块结构存储加速特征遍历、加权分位数草图优化分裂点选择、稀疏感知处理缺失值等。
特征工程
数据处理和特征工程是机器学习中极为重要的一环,本次提供的数据中包含了非常多的有价值的信息,如:影响力、购买数、分享数等,从某种程度上看这些数据如同收益一样都非常有价值,需要充分利用起来。我们把这些因素的前3天、前7天和前30天的均值都计算出来,喂给XGBoost训练。
此外,时间特征及周期特征也需要充分利用起来,比如周末往往比周内的消费更高,每年中国的双11、618、美国的黑色星期五等消费周期都需要考虑进来。
# 添加⽇期特征和周期特征 df['year'] = df['day'].dt.year df['month'] = df['day'].dt.month df['quarter'] = df['day'].dt.quarter df['week'] = df['day'].dt.isocalendar().week df['day_of_week'] = df['day'].dt.dayofweek df['day_of_month'] = df['day'].dt.day df['day_sin'] = np.sin(2 * np.pi * df['day_of_week'] / 7) df['day_cos'] = np.cos(2 * np.pi * df['day_of_week'] / 7) # 定义需要计算滚动平均的列 columns_to_roll = ['收益', '影响⼒', '购买数', '分享数',...] # 计算滚动平均特征 for col in columns_to_roll: df[f'{col}_mean_3'] = df[col].rolling(window=3, min_periods=1).mean() df[f'{col}_mean_7'] = df[col].rolling(window=7, min_periods=1).mean() df[f'{col}_mean_30'] = df[col].rolling(window=30, min_periods=1).mean()
计算调整值和调整系数
在使用XGBoost训练好模型后,进行每个渠道的投放值预测,对这些值进行求和,就是当天所有投放值。我们需要充分考虑到使用局部加权回归预测的整天的投放值和使用XGBoost预测单个渠道投放值之和计算出来的整天投放值。根据经验,我们使用两者之差的一半作为调整值,目的是让最终结果接近两者的平均值。接下来我们需要计算如何去分配这些调整值。
1.计算调整值
2.计算每个渠道在前一天的单位收益成本
3.计算近7天内整体收益成本
4.归一化处理成调整系数
5.根据每个渠道的调整系数和调整值,对其进行调整
大模型分配每个adset的调整值
目标:尽量让大模型学习投放师的操作,以与真实投放的差值大小衡量模型预测的效果。
根据投放原则,最后调整预测值,原则如下:
- 每个渠道新预算的变化幅度(包括增幅和减幅)不超出前一天投入金额的%,若变化幅度大于%则限制为**%;
- 如果当前渠道计算后的新预算金额小于0则设置为0;
system_prompt = """ ### ⻆⾊ 你是⼀位**投资分析师,职责是根据不同投资渠道的历史效果数据给出今⽇的预算调整建议。 ### 任务 给你当前的统计数据: 1、投资整体调整⾦额 2、每个渠道详细数据,包括...... 3、...... 在满⾜原则的情况下,给出每个渠道的预算调整动作(增加预算或者减少预算)和具体调整幅度的建议 ### 投放原则 在分析每个渠道的过程中,你必须依次检查并遵循以下所有原则: - 1. 如果当前渠道的建议调整⽐例为None,则不进⾏新预算调整计算,但仍需判断原则3、4、5、6; - 2. 计算每个渠道的新预算,公式为:新预算 = 初步预算 + 整体调整⾦额 × 建议调整⽐例; - 3. 每个渠道新预算的变化幅度(包括增幅和减幅)不超出前⼀天投⼊⾦额的**%,若变化幅度⼤于**%则限制为**%; - 4. ...... - 5. ...... - 6. ......
3. 总结
大模型在数学计算、拟合回归等方面依然具有较大的提升空间,在遇到投资这种二级混沌的场景的能力有限,而机器学习由于其计算能力强,可解释性强的优势,可以结合大模型提高预测的精准度。在本文的场景中,我们使用XGBoost算法和局部加权线性回归算法计算出一个初始投入值,让大模型根据分析师的投资习惯、市场情况再对投入值二次分配。客户对我们的方案非常认可,目前已经在生产环境试运行,取得了不错的效果,后续我们会继续按照机器学习+大模型的方向继续打磨,将方案推广至类似场景。最后也要感谢项目组同学的群策群力。
来源 | 阿里云开发者公众号
作者 | 侯浩川(笃依)