我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

市场营销部门是负责“花钱”的,销售部门是负责“赚钱”的。那么,市场营销的各种费用投入,是否得到了利润回报了?如何根据以往的数据表现,调整营销投入策略呢?这个问题,本文的线性回归模型可以提供一定的理论参考价值。

苏南大叔:机器学习线性回归模型,营销投入情况预测净利润 - 线性回归预测
机器学习线性回归模型,营销投入情况预测净利润(图2-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。测试环境:win10python@3.13.2sklearn@1.6.1

基础数据

现在假设市场部一共有三个渠道进行营销,分别是:抖音、快手和百度。三者每月投入单位是万元,营收单位也是万元。目前一共有三年的基础数据,保存marketing.csv文件里面。

因为是非公开数据,并且数字具体是什么并不重要,这里仅做示例。如下图所示:

苏南大叔:机器学习线性回归模型,营销投入情况预测净利润 - 数据集
机器学习线性回归模型,营销投入情况预测净利润(图2-2)

模型训练

模型训练的过程,和以往的其它的模型的使用方式,其实非常相似。没有太大区别,套路感十足。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

ad_data = pd.read_csv("marketing.csv",encoding = "gbk")
ad_data.drop("期数", axis = 1, inplace = True)

X = ad_data.drop("净利润", axis = 1) # 特征值
y = ad_data["净利润"] # 目标值
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)

这个数据集里面,第一列数据抛弃,第二三四列数据做特征值,最后一列数据做目标值。把90%的数据都拿来做了训练,剩下的10%数据做验证。
使用random_state来固定随机状态。

模型预测

y_pred = model.predict(X_test)
print(y_pred.round(1).tolist())
print(y_test.tolist())

输出:

[16.4, 20.8, 21.6, 10.5, 22.1, 13.0, 21.0, 7.5, 13.7, 15.2, 9.0, 6.7, 14.4, 8.8, 9.8, 12.2, 8.7, 16.3, 10.3, 18.9]
[16.9, 22.4, 21.4, 7.3, 24.7, 12.6, 22.3, 8.4, 11.5, 14.9, 9.5, 8.7, 11.9, 5.3, 10.3, 11.7, 5.5, 16.6, 11.3, 18.9]

肉眼观测的话,预测值和实际值相差不多,模型效果不错。

模型评估

注意:本文使用的是线性回归模型,适合于数值预测,而不是分类。所以,原来熟知的f1 score评分标准是不能使用的。

from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from sklearn.metrics import explained_variance_score, median_absolute_error, max_error

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
explained_variance = explained_variance_score(y_test, y_pred)
median_ae = median_absolute_error(y_test, y_pred)
max_err = max_error(y_test, y_pred)

print(f"Mean Squared Error: {mse}")
print(f"R-squared: {r2}")
print(f"Mean Absolute Error: {mae}")
print(f"Explained Variance Score: {explained_variance}")
print(f"Median Absolute Error: {median_ae}")
print(f"Max Error: {max_err}")

输出:

Mean Squared Error: 3.1308020912380483
R-squared: 0.9046924770871361
Mean Absolute Error: 1.3694443359949906
Explained Variance Score: 0.9063782982979743
Median Absolute Error: 0.9736679787722031
Max Error: 3.54738904354985

指标解释

万能的deepseek-r1满血版是这么解释这个指标的:

均方误差(MSE):平均值为3.13,说明预测值与实际值之间的平均平方差。平方误差放大了较大的误差,突出了模型在减少大误差方面的表现。

决定系数(R²):值为0.905,表示模型解释了约90.5%的数据变异。高R²值表明模型拟合得很好,解释了数据中的大部分变化。

平均绝对误差(MAE):平均值为1.369,表示预测值与实际值之间的平均绝对差。MAE稳健,未被大误差显著影响,说明模型预测的准确性较高。

解释方差分数(Explained Variance):值为0.906,与R²类似,表示模型解释了大部分方差。高值表明模型在预测任务中表现优异。

中位数绝对误差(Median Absolute Error):中位数值为0.974,表示预测值与实际值之间的中位绝对差。稳健指标,表明有一半的预测误差在0.974左右,表现良好。

最大绝对误差(Max Error):值为3.547,表示预测值与实际值之间的最大绝对差。在可接受范围内,说明模型在极端情况下的表现较好。

总结:模型在回归任务中表现出色,拟合度高,预测准确,适合需要高精度的应用场景。尽管有一些指标需要进一步理解,但整体表现良好,适合用于需要高拟合度和准确性的回归任务。

结语

更多苏南大叔的人工智能相关文章,请关注苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   ai