作业——机器学习教你预测商品销售额
(一)作业要求
advertising.csv文件(文件私聊可取)是某商品的广告推广费用(单位为元)和销售额数据(单位为千元),其中每行代表每一周的广告推广费用(包含微信、微博和其他类型三种广告费用)和销售额。若在未来的某两周,将各种广告投放金额按如下分配,请预测对应的商品销售额:
(1)微信:100,微博:100,其他类型:100
(2)微信:200,微博:100,其他类型:50
另外,请提交对应的代码。若有对应的说明文档,也请提交。
(二)作业内容
对于这个实验,是机器学习中最常见的一类回归问题,通过已有的数据,判断对某一数据的影响,我将依次按照下列顺序进行。
对表格中基本信息的观察:
当我们打开Excel文件的时候,得到的是一系列的数据,一共201行,4列;第一行是标签的信息,包括微信、微博、其它和销售额(前三个是投放),底下的二百行是不同的投放量和对应的销售额。如此看来不是很直观,我们可以通过matplotlib将数据可视化出来,另外,为了使绘制的图更好看,我还使用了seaborn库中的set函数。
因为我想使用线性回归的方法对样本进行估计,所以需要观测三种投放量之间和销售额是否存在线性关系,简单直观的方式可以是使用散点图在二维平面中对数据进行可视化表示,于是我们再通过plt.scatter()绘制散点图:
观察图像我们得出的结论是:①每种投放量都是在一定区域内浮动的,没有一个准确的定值,且相对而言微信投放量最大、其他投放次之、微博投放最少②销售额大体上随着三种投放的增加而增加,并且在5~25(千元)内浮动③观察散点图中销售额和各投放量的关系我们可以得到:微信投放和销售额的线性关系最强,其他投放和销售额的线性关系最弱。但是都满足,随着投放量的增长,销售额也随之增长。
2、分别对各投放量的销售额进行估计
上面的散点图告诉我们,投放量和销售额大致满足线性关系,那我们分别用微信投放量、微博投放量、其他投放量和三者总投放量对销售额进行预测。
- 用三种总投放量预测销售额
首先,我们通过pandas库读取csv文件并分别获取投放量和销售额的信息,然后我们通过sklearn.model_selection中的train_test_split将数据分割为测试集和训练集,在此我定义测试集的比例为0.1。因为我首先选择使用最简单的线性回归进行预测,所以我们还要导入LinearRegression并且通过fit函数对模型进行训练,训练之后,为了检测结果的耦合程度,我们利用测试集的X_test通过predict函数产生一个预测的y_predict,然后和真实值y_test进行比较,为了使结果更形象,我们可以绘制一个折线图,并且通过sklearn库中封装好的score函数对模型进行评分,然后呈现出来。
评分是0.957,再看图像,大体上还是令人满意的,于是我们根据所给的投放量:
① 微信:100,微博:100,其他类型:100
② 微信:200,微博:100,其他类型:50
再次进行预测,预测的方法很简单,直接将所给的数据装到一个DataFrame类型的数组中,然后以这个数组作为x_test,输出测试的predict即可。
预测值分别为7.148千元和8.336千元,我查看了表中类似的数据,结果大体上正确。
2、通过微信、微博、其他投放进行预测
其实这部分并没有什么太大的意义,只是我希望看到三种投放量哪个对销售额影响大、哪些影响小。对于这部分,具体代码和上面几乎一模一样,就是把测试和训练用的数据限定在微信投放量上,这样得到的预测曲线和预测结果如下:
(微信)
(微博)
(其它)
我们发现除了微信投放和销售额曲线较为拟合外,其他两种投放方式和实际值相去甚远,也就看出不可以使用线性回归对这两种投放量进行预测。
观察到如此大的差异后,我们再用回归系数观测一下三种投放量对销售额的影响程度:我们可以通过seaborn库中的heatmap热力图来绘制相关性矩阵热力图,比较各个变量之间的相关性:
颜色越浅代表相关性越大,图中可以看出微信对销售额的影响最大,其他对销售额的影响最小,为了让图反应出的信息更加直观,我们可以直接打印出相关性的排名如下:
相关性最大的是微信。同时根据回归系数的性质我们知道,回归系数越大,说明x对y的影响越大,所以我们也可以通过查看他们的回归系数来判断三种投放对销售额的影响程度。
3、使用多项式回归预测销售额
在上面的过程中我发现对于微博投放和其他投放而言,从散点图可以看出它们和销售额并不完全服从线性回归。在观看了北京理工大学python机器学习应用部分章节之后,我了解到对于线性不拟合的数据,我们也可以通过多项式拟合的方式预测数据。
下面我将以多项式拟合查看和销售额的拟合程度并且预测在给定条件下的销售额的值。
我们将PolynomialFeatures的degree属性设置为2,也就是关于微信投放量信息X的二次多项式,然后我们选择一百八十个数据进行训练,并且打印出训练后曲线和原散点图的图像:
结果非常的amazing啊,比线性回归的的一条直线要拟合不少,然后我们再拿出20个数据进行预测,看看大概的匹配程度如何:
可以看到结果还是差强人意(大体上使人满意)的,两种投放方式得出的结果和第一次得出的结果还是挺接近的。
4、使用随机森林预测销售额
我感觉单纯的线性回归还是满足不了我,我就又在网上找其他的回归方法,最终决定用随机森林的方法再次预测销售额。
随机森林的定义我就不班门弄斧了,下面直接进行操作,依然分别进行三种投放同时作用和分别作用造成的销售额的变化情况。
- 三种投放同时作用
其实我感觉各种回归方法虽然很难,但是基本的运用还是很容易的,只是需要反复使用fit和predict方法罢了,然后通过plot函数打出来,结果如下:
可以看到拟合程度非常的高!但是其实我也不知道原理,只是发现通过这个方法只需要十几行代码就可以让它的拟合度如此之高!我们趁热打铁,把预测结果的值算出来:
可以发现和我们最初使用线性回归的结果十分接近,并且应该更准确。
2、只有微信投放
3、只有微博投放
4、只有其他投放
总的来说:三种算法算出的结果分别在7~8和8~9之间。
最后,如果需要数据集,可以在数据集这里自行下载。
作业——机器学习教你预测商品销售额相关推荐
- 使用时间序列分解模型预测商品销量(手把手教你如何利用阿里云大数据开发套件进行商品销量的预测)
使用时间序列分解模型预测商品销量 1.1实验目的 1.2实验概述 1.3 实验目标 1.4 实验工具 1.5 实验准备 实验资源 ============== 这是一条分割线 ============ ...
- 机器学习与时间序列预测
机器学习与时间序列预测 爱斯翠摩鸡 关注 2018.03.15 14:02* 字数 2186 阅读 2711评论 8喜欢 9 前言 在所有的预测问题里面,时间序列预测最让我头疼. 做时间序列预测,传 ...
- 大数据第一课(满分作业)——泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster)
大数据第一课(满分作业)--泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster) 1 项目背景 1.1 The Challenge 1.2 What ...
- 调参侠级机器学习之股票预测初级阶段
由于复习考研,高数英语占日常学习比例较大,最近按照论文的格式,把期末作业整理了一下,以下为正文: 摘要: 股票预测是指:对股市具有深刻了解的证券分析人员根据股票行情的发展进行的对未来股市发展方向以 ...
- 【数据分析】利用机器学习算法进行预测分析(一):移动平均(Moving Average)
时间序列预测中的机器学习方法(一):移动平均(Moving Average) 1.背景介绍 如果可能的话,每个人都想成为先知,预测在未来会发生什么事.实际上,这种预测非常困难.试想某个人提前知晓了市场 ...
- 阿里云ACA 使用时间序列分解模型预测商品销量(一)
使用时间序列分解模型预测商品销量 1.1实验目的 1.2实验概述 1.3 实验目标 1.4 实验工具 1.5 实验准备 实验资源 ============== 这是一条分割线 ============ ...
- 阿里云ACA 使用时间序列分解模型预测商品销量(三)
本文接上一篇使用时间序列分解模型预测商品销量---计算回归的差值dQ 发表本博客的目的在于记录笔记,分享经验,无其他任何目的 计算回归的差值dQ 使用线性回归方程预测出来的是与时间无关因素对产品销量的 ...
- pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations).例如,计算两种商品销售额之间的3个月的滚动相关性 目录
- excel中使用CORREL函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
excel中使用CORREL函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations).例如,计算两种商品销售额之间的3个月的滚动相关性 目录
最新文章
- D3D中简单的截图方法 (转)
- OpenGL-渲染管线的流程(有图有真相)
- 篝火 2004 年11-15
- mysql boolean 和bool_关于 MySQL 的 boolean 和 tinyint(1)
- lambda表达式或者匿名函数中为什么要求外部变量为final
- 安徽中职计算机专业对口高考,安徽对口高考和普通高考有什么区别?
- 力扣每日一题 2021.10.23
- 排序算法与常见数据结构
- python︱apple开源机器学习框架turicreate中的SFrame——新形态pd.DataFrame
- 讲python现状的文章_用 Python 分析 Python 工作现状
- 完整的棋牌游戏开发流程,你知道多少棋牌游戏开发。
- 如何做一个本地漫画党:了解漫画+下载漫画+漫画APP推荐
- linux 中 etc fstab目录,Linux学习— /etc/fstab文件详解
- WorkPlus协同办公系统的优势有哪些?
- 【css】使用 canvas 画一个圆、贝塞尔曲线画对话气泡
- 7条简单粗暴的工作建议
- Java项目:SSH自驾游管理系统
- 【深度学习】时间注意力模块与空间注意力模块
- 程序员之间的战争,某宁测试和开发干架,鼠标线勒脖子都来了!
- 制作多系统启动盘教程_u盘启动盘制作工具教程
热门文章
- DolphinDB智臾科技CEO周小华:《从反向控制的终极目标谈时序数据库的架构设计》
- 狄利克雷条件和帕塞瓦尔定理
- c++ 箭头符号怎么打_C++编程基础知识二
- 处理器仿存带宽_存储系统性能 - 带宽计算
- Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Process
- 欧拉函数φ(x)简要介绍及c++实现
- 斗罗大陆壁纸图片高清小舞146集八段摔杨无敌
- python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论——作业帮
- 【微信】微信小程序前后端数据请求示例
- HTML-HTML协议简单解析