[应用开发] 基于随机森林算法的ROI预测模型
[应用开发] 基于随机森林算法的ROI预测模型
[应用开发] 基于随机森林算法的ROI预测模型 [应用开发] 基于随机森林算法的ROI预测模型 Modified December 10, 2025 3878 4070 Code block Python weighted budget sum += best budget max predicted roi weighted days sum += best days max predicted roi 更新全局的最大预测 ROI if max predicted roi overall max predicted roi: overall max predicted roi = max predicted roi 计算加权平均预算和天数 weighted avg budget = weighted budget sum / total weight weighted avg days = weighted days sum / total weight return weighted avg budget, weighted avg days, overall max predicted roi 计算全局的加权平均预算和天数 avg budget, avg days, max predicted roi = compute weighted average optimized() print(f"Weighted Average Budget: {avg budget}") print(f"Weighted Average Days: {avg days}") print(f"Max Predicted ROI: {max predicted roi}") 基于一组真实的数据(样本量不是很多,大概100以内,所以决策树不会太深),我们得出下面的结果: Weighted Average Budget: 853656.2849403115 (最优的日均花费) Weighted Average Days: 5.961116238544618 (最优的投放天数,取整约等于6天) Max Predicted ROI: 0.5868678716061172 (预测的最大化ROI) 其他模块 模型拟合度对比 如果我们想查看模型的预测值和真实值的对比,可以增加一个小模块,把现有变量的预测值也跑出来和真实值做个对比,肉眼检查模型的拟合度。 Code block Python 对所有数据点进行预测,比较实际 ROI 和预测 ROI all predicted roi = best rf.predict(X) 将实际 ROI 与预测值输出为 DataFrame 进行比较 results = pd.DataFrame({ 'Actual ROI': y, 'Predicted ROI': all predicted roi }) 输出每个数据点的预测值 print("\nPredicted ROI for each data point:") print(results) 保存结果到 Excel 文件 results.to excel('predicted vs actual roi.xlsx', index=False) 使用 Colab 文件工具来下载文件 from google.colab import files files.download('predicted vs actual roi.xlsx') 这里用随机森林和多项式回归分别跑了一次,可以看到随机森林的拟合度明显要更高一些 固定参数的趋势预测 比如我想知道,在预算固定在800,000的时候,投放天数对ROI的影响 Code block Python @title 模型训练 Option2 随机森林回归 (Random Forest Regression) 4 import matplotlib.pyplot as plt def plot roi changes fixed budget(budget=800000, days range=(1, 14)): 日均预算80万,投放天数1 14 """ 绘制固定预算条件下,不同投放天数下的 ROI 变化。 :param budget: 固定的日均预算 :param days range: 投放天数的范围 """ 将预算标准化 budget scaled = scaler budget.transform([[budget]])[0][0] rois = [] days = list(range(days range[0], days range[1] + 1)) for day in days: 将天数标准化 days scaled = scaler days.transform([[day]])[0][0] 创建输入特征 input features = np.hstack((np.array([[budget scaled]]), np.array([[days scaled]]), np.array([[cvr scaled.mean()]]))) 预测 ROI predicted roi = best rf.predict(input features)[0] rois.append(predicted roi) 绘制 ROI 变化图 plt.figure(figsize=(10, 6)) plt.plot(days, rois, marker='o') plt.title(f"ROI Changes with Fixed Budget of {budget} and Varying Days") plt.xlabel("Days") plt.ylabel("Predicted ROI") plt.grid(True) plt.show() 调用函数 plot roi changes fixed budget(budget=800000, days range=(1, 14)) 或者在投放天数固定为6的情况下,不同预算量级的ROI预测 Code block Python def plot roi changes fixed days(days=6, budget range=(100000, 1000000, 100000)): """ 绘制固定投放天数条件下,不同日均预算下的 ROI 变化。 :param days: 固定的投放天数 :param budget range: 日均预算的范围和步长 (start, stop, step) """ 将天数标准化 days scaled = scaler days.transform([[days]])[0][0] rois = [] budgets = list(range(budget range[0], budget range[1] + 1, budget range[2])) for budget in budgets: 将预算标准化 budget scaled = scaler budget.transform([[budget]])[0][0] 创建输入特征 input features = np.hstack((np.array([[budget scaled]]), np.array([[days scaled]]), np.array([[cvr scaled.mean()]]))) 预测 ROI predicted roi = best rf.predict(input features)[0] rois.append(predicted roi) 绘制 ROI 变化图 plt.figure(figsize=(10, 6)) plt.plot(budgets, rois, marker='o') plt.title(f"ROI Changes with Fixed Days of {days} and Varying Budgets") plt.xlabel("Budget (in 10,000)") plt.ylabel("Predicted ROI") plt.grid(True) plt.show() 调用函数 plot roi changes fixed days(days=6, budget range=(100000, 1000000, 100000)) 备注:由于数据样本的局限性,以及变量和结果的线性关系(平滑度),同样的模型得到的预测性能会有很大偏差,建议大家根据自己数据集的实际情况做出相应优化。 基于一组真实的数据(样本量不是很多,大概100以内,所以决策树不会太深),我们得出下面的结果: Weighted Average Budget: 853656.2849403115 (最优的日均花费) Weighted Average Days: 5.961116238544618 (最优的投放天数,取整约等于6天) Max Predicted ROI: 0.5868678716061172 (预测的最大化ROI) 其他模块 模型拟合度对比 如果我们想查看模型的预测值和真实值的对比,可以增加一个小模块,把现有变量的预测值也跑出来和真实值做个对比,肉眼检查模型的拟合度。 这里用随机森林和多项式回归分别跑了一次,可以看到随机森林的拟合度明显要更高一些 固定参数的趋势预测 比如我想知道,在预算固定在800,000的时候,投放天数对ROI的影响 或者在投放天数固定为6的情况下,不同预算量级的ROI预测 备注:由于数据样本的局限性,以及变量和结果的线性关系(平滑度),同样的模型得到的预测性能会有很大偏差,建议大家根据自己数据集的实际情况做出相应优化。 💡 作者:吵爷 之前碰到个需求,一些always on的转化类广告项目,客户经常会提问:我应该怎么分配每日的预算?在某个广告平台上,一套素材投几天?以往运营团队在没有精细计算的情况下,会给到一个比较模糊的轮廓经验值(比如一天80万,一套素材投14天),但在积累了一定量的数据以后,我们可以尝试用算法去完成这个预测(或者叫总结),给到一些更精确的回答。 这个任务我同样给了高斯过程回归和多项式回归(扩展到了3次方),但实践下来还是随机森林的算法效果更好,所以目前主要推荐用这套算法来完成预测。下面是具体的脚本,同样在colab上运行,需要改到本地运行的同学调整一下文件读取和存储的路径模块即可 作者:吵爷 之前碰到个需求,一些always on的转化类广告项目,客户经常会提问:我应该怎么分配每日的预算?在某个广告平台上,一套素材投几天?以往运营团队在没有精细计算的情况下,会给到一个比较模糊的轮廓经验值(比如一天80万,一套素材投14天),但在积累了一定量的数据以后,我们可以尝试用算法去完成这个预测(或者叫总结),给到一些更精确的回答。 这个任务我同样给了高斯过程回归和多项式回归(扩展到了3次方),但实践下来还是随机森林的算法效果更好,所以目前主要推荐用这套算法来完成预测。下面是具体的脚本,同样在colab上运行,需要改到本地运行的同学调整一下文件读取和存储的路径模块即可 步骤1:加载依赖项 步骤2:上传文件 这里默认文件命名为"data.xlsx"的文件,colab上避免重复上传,加入了删除历史文件的模块,本地不需要 步骤3:训练模型 注意:上传的excel文件对应的列标题和代码中对应。这里举例子:"days, budget, cvr, roi" 是excel中的数据项目,所以之后的代码会对应。也可以改成自动化识别的,但因为我需要过滤一些影响权重比较小的数据(比如素材版本),所以这里直接定义了。 步骤4:全局计算并得出ROI最优解 这里的目标是:为了得出最好的ROI,daily budget和days的最优安排