使用机器学习算法预测在线订餐需求

咱们国内的美团和国外的 Swiggy 和 Zomato 引入市场后,在线订餐的需求量很大。食品配送公司利用客户的购买习惯来加快配送过程。食品订单预测系统是这些公司可以用来加快整个交付过程的有用技术之一。

这些公司对客户的主要目标是在正确的时间交付食物。为了更快地交付食物,这些公司确定了在线食品订单需求较高的地区,并在这些地区雇用了更多的外卖员来在订单较多的地区更快地交付食物。

这些公司拥有大量有关客户的数据,因此他们现在了解所有客户的订餐习惯。利用这些数据,他们还可以预测客户是否会再次从他们的应用程序订购。这是识别具有更多商机的地区、家庭和客户类型的好方法。

引入相关的包和加载数据集

import numpy as npimport pandas as pdimport numpy as npimport plotly.express as pximport plotly.graph_objects as goimport matplotlib.pyplot as pltimport seaborn as snssns.set_theme(style="whitegrid")
data = pd.read_csv("../data/onlinefoods.csv")data.head()

图片

数据包含以下信息

  • 客户的年龄(Age)

  • 客户的婚姻状况(Marital Status)

  • 客户的职业(Occupation)

  • 客户的月收入(Monthly Income)

  • 客户的受教育程度(Educational Qualifications)

  • 客户的家庭规模(Family size)

  • 客户所在位置的纬度和经度(latitude, longitude)

  • 客户居住地的 Pin code

  • 客户再次订购了吗(Output)

  • 最后订单的反馈(Feedback)

我们来看看数据集中所有列的信息:

data.info()

图片

分析这些数据

我将首先根据客户的年龄查看在线食品订单决策:

plt.figure(figsize=(15, 10))plt.title("Online Food Order Decisions Based on the Age of the Customer")sns.histplot(x="Age", hue="Output", data=data)plt.show()

图片

我们可以看到,22-25岁年龄段的人再次频繁点餐。这也意味着这个年龄段是在线食品配送公司的目标客户。

现在让我们看看根据客户家庭人数做出的在线订餐决策:

plt.figure(figsize=(15, 10))plt.title("Online Food Order Decisions Based on the Size of the Family")sns.histplot(x="Family size", hue="Output", data=data)plt.show()

图片

有 2 人和 3 人的家庭经常点餐。也许他们是室友、情侣或三口之家。

创建一个包含所有再次订购食物的顾客的数据集:​​​

buying_again_data = data.query("Output == 'Yes'")buying_again_data.head()

图片

现在我们看一下性别栏。看看哪种性别的客户在网上订餐的次数更多:

gender = buying_again_data["Gender"].value_counts()label = gender.indexcounts = gender.valuescolors = ['gold','lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])fig.update_layout(title_text='Who Orders Food Online More: Male Vs. Female')fig.update_traces(hoverinfo='label+percent', textinfo='value', textfont_size=30,                  marker=dict(colors=colors, line=dict(color='black', width=3)))fig.show()

图片

数据显示,男性顾客比女性顾客订购的商品更多。

看看再次下单的顾客的婚姻状况

图片

根据上图,76.1%的常客是单身人士。

现在我们再看看再次点餐的顾客的收入群体是怎样的:

income = buying_again_data["Monthly Income"].value_counts()label = income.indexcounts = income.valuescolors = ['gold','lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])fig.update_layout(title_text='Which Income Group Orders Food Online More')fig.update_traces(hoverinfo='label+percent', textinfo='value', textfont_size=30,                  marker=dict(colors=colors, line=dict(color='black', width=3)))fig.show()

图片

根据上图,54%的客户不属于任何收入群体。她们可以是家庭主妇或学生。

现在我们为训练机器学习模型的任务准备数据。这里我将所有离散特征转换为数值型:

data["Gender"] = data["Gender"].map({"Male": 1, "Female": 0})data["Marital Status"] = data["Marital Status"].map({"Married": 2,                                                      "Single": 1,                                                      "Prefer not to say": 0})data["Occupation"] = data["Occupation"].map({"Student": 1,                                              "Employee": 2,                                              "Self Employeed": 3,                                              "House wife": 4})data["Educational Qualifications"] = data["Educational Qualifications"].map({"Graduate": 1,                                                                              "Post Graduate": 2,                                                                              "Ph.D": 3, "School": 4,                                                                              "Uneducated": 5})data["Monthly Income"] = data["Monthly Income"].map({"No Income": 0,                                                      "25001 to 50000": 5000,                                                      "More than 50000": 7000,                                                      "10001 to 25000": 25000,                                                      "Below Rs.10000": 10000})data["Feedback"] = data["Feedback"].map({"Positive": 1, "Negative ": 0})data.head()

图片

现在我们训练一个机器学习模型来预测客户是否会再次订购。

我首先将数据分为训练集和测试集:

from sklearn.model_selection import train_test_split
x = np.array(data[["Age", "Gender", "Marital Status", "Occupation",                    "Monthly Income", "Educational Qualifications",                    "Family size", "Pin code", "Feedback"]])y = np.array(data["Output"])
X_train, X_test, y_train, y_test=train_test_split(x, y, test_size=0.2, random_state=4)

然后训练一个随机森林分类器:

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()model.fit(X_train, y_train)model.score(X_test, y_test)

模型在测试集上的准确率约为 94.87%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么无法正确上传表格?为什么上传表格后数据有缺失?

大家在使用易查分制作查询系统时,偶尔会出现上传内容与电子表格不一致、部分数据缺失的情况,出现这种情况该如何解决呢?本次就来介绍下解决方案。 📌正确表格制作方式 1.正确的表格第一行必须是表头(如:姓名…

Matplotlib雷达图教程:学会绘制炫酷多彩的多维数据可视化【第53篇—python:Seaborn大全】

文章目录 Matplotlib雷达图绘制指南:炫酷雷达图参数解析与实战1. 普通雷达图2. 堆叠雷达图3. 多个雷达图4. 矩阵雷达图5. 极坐标雷达图6. 定制化雷达图外观7. 调整雷达图坐标轴范围8. 雷达图的子图布局9. 导出雷达图总结 Matplotlib雷达图绘制指南:炫酷雷…

Linux——存储管理

文章目录 基本分区磁盘简介磁盘分类linux的磁盘命名磁盘的分区方式 管理磁盘虚拟机添加硬盘查看磁盘信息磁盘分区流程创建分区创建文件系统挂载mount查看挂载信息 剩余空间继续分区MBR如何划分更多的分区为什么只能有4个主分区扩展分区的引入 逻辑卷LVM是什么特点术语创建LVMVG…

寒假作业2月2号

第一章 命名空间 一.选择题 1、编写C程序一般需经过的几个步骤依次是(C ) A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 2、所谓数据封装就是将一组数据和与这组数据有关…

AI监控+智能充电桩系统如何缓解新能源汽车充电难问题

在新能源汽车行业的快速发展中,充电桩作为重要的配套设施,其建设和发展至关重要。随着新能源汽车销量的增长,补能需求也日益迫切,这为充电桩行业的发展提供了巨大的机遇。然而,充电桩行业在快速发展的同时,…

应对手机数据丢失的5大安卓数据恢复软件

我们都去过那里。您的手机上的数据丢失了,现在无法恢复。这尤其令人恐惧,因为我们的手机上都有如此多的信息。从图片、应用程序、个人信息,甚至是来自可能已不复存在的亲人的短信和语音邮件。这种情况确实发生了,而且也不仅仅是An…

单片机学习笔记--- 定时器/计数器(简述版!)

目录 定时器的介绍 定时计数器的定时原理 定时计数器的内部结构 两种控制寄存器 (1)工作方式寄存器TMOD (2)控制寄存器TCON 定时计数器的工作方式 方式0 方式1 方式2 方式3 定时器的配置步骤 第一步,对…

【AudioPolicy To AudioHAL笔记(三)】安卓S上audio_policy_configuration.xml 加载过程分析

安卓S上audio_policy_configuration.xml 加载过程分析 /*****************************************************************************************************************/ 声明: 本博客内容均由https://blog.csdn.net/weixin_47702410原创,转载or引用请注明…

用于录制培训视频的前 6 名顶级录屏软件

教程视频是当今互联网上最受欢迎的视频类别之一。许多人都在寻找如何使用他们购买的东西的说明,但由于没有时间,文本中编写的教程无法实现目标。人们更喜欢观看互联网教程视频的可能性是参考产品手册的三倍。此外,由于程序的可访问性&#xf…

web前端--------渐变和过渡

线性渐变,是指颜色沿一条直线进行渐变,例如从上到下、从左到右。 当然,CSS中也支持使用角度来设置渐变的方向,角度单位为deg。 0deg,为12点钟方向,表示从下到上渐变。 90deg,为3点钟方向&…

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1)介绍 命令中多个参数之间使用空格进行分隔,而 cmake 会将双引号引起来的内容作为一个整体,当它当成一个参数,假如你的参数中有空格(空格是参数的一部分),那么就可以使…

【巧用异或】单身狗2题解

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:【每日刷题】C语言 个人主页:Celias blog~ 题目 一个数组中只有两个数字是出现一次&#xff0c…