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

咱们国内的美团和国外的 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%。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],…

【数据开发】pyspark入门与RDD编程

【数据开发】pyspark入门与RDD编程 文章目录 1、pyspark介绍2、RDD与基础概念3、RDD编程3.1 Transformation/Action3.2 数据开发流程与环节 1、pyspark介绍 pyspark的用途 机器学习专有的数据分析。数据科学使用Python和支持性库的大数据。 spark与pyspark的关系 spark是一…

[BUUCTF]-PWN:roarctf_2019_easy_pwn解析

先看保护 64位,got表不可写 看ida 大致就是alloc创建堆块,fill填充堆块,free释放堆块,show输出堆块内容 这里要注意的点有以下 alloc创建堆块:这里采用的是calloc而不是malloc,calloc在创建堆块时会初始…

小白水平理解面试经典题目_二维数组类LeetCode 2966 Divide Array【排序算法实现】

2966 将数组划分为具有最大差值的数组 小白渣翻译: 给定一个大小为 n 的整数数组 nums 和一个正整数 k 。 将数组分成一个或多个大小为 3 的数组,满足以下条件: nums 的每个元素都应该位于一个数组中。一个数组中任意两个元素之间的差异小…

python打造光斑处理系统6:高斯拟合

文章目录 构建拟合函数数据获取打印信息 光斑处理:python处理高斯光束的图像 光斑处理系统: 程序框架🌟打开图像🌟参数对话框/伪彩映射🌟裁切ROI光强分布 构建拟合函数 scipy中提供了非线性最小二乘回归算法&#x…

创建型模式-单例模式:定义、实现及应用

目录 一、模式定义二、针对问题1.解决的问题2.解决方案3.举个例子4.设计模式适合场景5.实现方式6.优缺点7.与其他模式的关系 三、代码实现 一、模式定义 单例模式(Singleton Pattern)是一种创建型模式,用于限制某个类只能创建一个对象。它提…

CMake Msys2 搭配vscode

(一)MSYS2介绍 MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境,可以在Windows系统中编译和运行许多Linux应用程序和工具。 MSYS2基于MinGW-w64平台,提供了…

04、全文检索 -- Solr -- 管理 Solr 的 core(使用命令和图形界面创建、删除 core,以及对core 目录下的各文件进行详细介绍)

目录 管理 Solr 的 core创建 Core方式1:solr 命令创建演示:使用 solr 命令创建 Core:演示:命令删除 Core(彻底删除) 方式2:图形界面创建Web控制台创建CoreWeb控制台删除 Core(未彻底…

使用css绘制小三角形

要使用CSS绘制小三角形&#xff0c;您可以使用border属性来设置边框样式。下面是一种常见的绘制小三角形的方法&#xff1a; <style>.box {width: 0;height: 0;/* border-top: 10px solid red; */border-bottom: 10px solid blue;border-left: 10px solid transparent;b…

【Mysql】事务的隔离级别与 MVCC

事务隔离级别 我们知道 MySQL 是一个 C/S 架构的服务&#xff0c;对于同一个服务器来说&#xff0c;可以有多个客户端与之连接&#xff0c;每个客户端与服务器连接上之后&#xff0c;就是一个会话&#xff08; Session &#xff09;。每个客户端都可以在自己的会话中向服务器发…

【算法与数据结构】718、1143、LeetCode最长重复子数组 最长公共子序列

文章目录 一、718、最长重复子数组二、1143、最长公共子序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析&#xff1a; 第一步&#xff0c;动态数组的含义。 d p [ i ] [ j ] dp[i]…

计算机视觉-PCV包、Vlfeat库、Graphviz库的下载安装配置及问题解决(使用anaconda3 python 3.8.5)

目录 一、PCV包配置 二、Vlfeat配置 三、在PCV包的sift.py文件中对路径进行修改 四、以上步骤所需注意的错误 五、Graphviz配置 一、PCV包配置 1.下载PCV包,点开网址直接下载安装包(不用解压),下载之后将安装包放在任意目录位置https://codeload.github.com/Li-Shu14…

Java_简单实现无头单向非循环链表_简单实现LinkedList

文章目录 一、ArrayList的优缺点二、链表1.链表的概念及结构2.链表的分类1、单向或者双向2、带头或者不带头3、循环或者非循环 三、实现无头单向非循环链表1.定义接口2.定义MySingleList3.成员1、节点类&#xff08;定义在MySingList类里&#xff09;2、头节点引用 4.打印链表实…

【服务器搭建】快速完成幻兽帕鲁服务器的搭建及部署【零基础上手】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 教程详戳&#xff1a;不需要懂技术&#xff0c;1分钟幻兽帕鲁服…

Datax问题记录

1、同步mysql&#xff1a;OS errno 24 - Too many open files 2023-11-20 12:30:04.371 [job-0] ERROR JobContainer - Exception when job run com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的…

【Kafka】 幂等和事务详解

目录 幂等性为什么需要幂等性如何实现幂等性使用幂等幂等性的限制条件幂等性的实现原理 事务为什么需要事务开启事务事务保证事务恢复的保证事务原子性的保证事务中 Offset 的提交保证用于事务特性的控制型消息 事务流程事务原理FindCoordinatorRequestInitProducerIdRequest开…

2.2作业

1、写一个宏&#xff0c;可以将一个int型整数的二进制位的奇数位和偶数位交换 2、递归实现字符串逆置 void func (char *src) {if (strlen(src) 0){return;} else{ func(&src[1]);printf("%c", src[0]);} } int main(int argc, const char *argv[]) { char *s …

☻C++ QA

0. 什么是“第一性原理”&#xff1f; 函数指针的定义泛式与原理&#xff1f;联合(union)的原理是怎样的&#xff1f;联合类型对象的指针是什么意思&#xff1f;命名空间在.h和.cpp中怎么定义和使用&#xff0c;是什么原理&#xff1f;静态变量/函数在.h和.cpp中怎么定义和使用…

资源推荐:web js linux windows vm 虚拟机

web js vm list https://bellard.org/jslinux/index.html 可以在在浏览器中运行 X Window 或 Windows 2000、linux 以下为示例&#xff1a; JSLinux - News 从2018-08-18开发更新到2021-01-09 … https://bellard.org/jslinux/news.html faq 常见问题解答 https://bella…

flv视频格式批量截取封面图(不占内存版)--其他视频格式也通用

flv视频格式批量截取封面图&#xff08;不占内存版&#xff09;--其他视频格式也通用 需求&#xff08;实现的效果&#xff09;功能实现htmlcssjs 需求&#xff08;实现的效果&#xff09; 批量显示视频&#xff0c;后端若返回有imgUrl,则直接显示图1&#xff0c; 若无&#xf…