当前位置: 首页 > news >正文

实战项目-课程潜在会员用户预测(朴素贝叶斯&神经网络)

目录

      • 1、背景介绍
      • 2、朴素贝叶斯
        • 2.1 模型介绍
        • 2.2 模型实现
      • 3、人工神经网络

1、背景介绍

目标:将根据用户产生的数据对课程潜在的会员用户(可能产生购买会员的行为)进行预测。

平台的一位注册用户是否购买会员的行为应该是建立在一定背景条件下。相信很少有用户刚刚完成注册不久,就直接购买会员。
一般来讲,促使付费行为发生的原因,往往都建立在用户的活跃度之上。
数据

!wget -nc “http://labfile.oss.aliyuncs.com/courses/764/data_10.zip”
!unzip -o “data_10.zip”

训练数据集包含有 8 个特征项,以及用户是否为会员的标签,数据共计 40000 条。

最后一项会员标签,通过布尔值进行标识。True 当前用户是会员身份,False 代表当前用户不是会员身份。

import pandas as pdpd.read_excel("user_fit.xlsx").head()

在这里插入图片描述
测试数据集包含 10000 条数据,且数据特征项与训练数据集完全一致。唯一不同的地方在于,训练数据集中既有会员数据也有非会员数据,而测试数据集中全部都为非会员用户。

pd.read_excel("user_prediction.xlsx").head()

在这里插入图片描述
**目标:**预测测试集中这些用户哪些是潜在用户,很可能购买会员的
这些数据已经是处理好的,没有缺失值的数据

2、朴素贝叶斯

2.1 模型介绍

朴素贝叶斯是一种可用于构建分类模型的方法,他是假设特征相互独立的情况下,运用贝叶斯定理进行后验概率计算的简单分类器。

贝叶斯公式:
在这里插入图片描述
数据集拥有 8 个特征值,分别为:用户的注册时间、用户的学习时间 用户实验豆数量、学习的课程数量、学习的实验数量、学习训练营数量 用户的提问数量、用户的评论数量。这些特征之间是相互独立的。

而这些特征可能会对最后的目标参数,也就是该用户是否为会员造成影响。也就是说,如果我们现在有一个会员的数据,我们知道他的 8 个特征取值,最后想了解他成为会员的概率有多大?

根据贝叶斯定理,且特征之间相互独立,得到:
在这里插入图片描述
像 P(用户的注册时间)P(用户的注册时间) 这样的概率怎样求解呢?由于我们这里是连续变量,一般会针对其进行离散化处理,也就是通过假定一个区间,计算变量落在该区间内的概率。
最后,我们就可以计算出该用户是会员和不是会员的概率,通过比较得出分类属性。

2.2 模型实现

直接使用 scikit-learn 提供的贝叶斯算法来构建模型

scikit-learn 针对朴素贝叶斯提供了三种分类器,分别是:

  • 高斯分布朴素贝叶斯分类器 naive_bayes.GaussianNB
  • 多项式分布朴素贝叶斯分类器 naive_bayes.MultinomialNB
  • 伯努利分布朴素贝叶斯分类器 naive_bayes.BernoulliNB

其中,高斯分布模型常用于特征值为连续型变量的数据集中,例如本实验中的数据集。高斯模型的特点在于它通常假设是这些连续数值为高斯分布,相比于直接把连续变量离散化的方法更优。
伯努利模型常用处理特征变量为布尔值类型的数据集,
多项式模型常用于文本分类。

尝试使用高斯分布朴素贝叶斯针对 user_fit.xlsx 数据集构建一个分类模型:

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB# 使用 Pandas 读取数据
df_fit = pd.read_excel("user_fit.xlsx", header=0)
# 特征
X = df_fit.iloc[:, 0:8]
# 目标
y = df_fit['用户是否为会员']
# 安装 3:7 切分验证集和训练集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
X_train.shape, X_test.shape, y_train.shape, y_test.shape

在这里插入图片描述

# 构建高斯贝叶斯分类器
model_GaussianNB = GaussianNB()
# 使用训练集训练模型
model_GaussianNB.fit(X_train, y_train)
# 使用验证集评估准确度
model_GaussianNB.score(X_test, y_test)

在这里插入图片描述

91%的准确率,可以接受,下面继续训练模型,并且保存为二进制文件

from sklearn.externals import joblibmodel_GaussianNB.fit(X, y)
# 保存模型
joblib.dump(model_GaussianNB, 'model_GaussianNB.pkl')

将该模型去评估 user_prediction.xlsx 非会员数据集中,潜在会员用户的概率:

# 使用 Pandas 读取数据
df_pred = pd.read_excel("user_prediction.xlsx", header=0)
# 特征
X_pred = df_pred.iloc[:, 0:8]
# 加载模型
model_GaussianNB = joblib.load('model_GaussianNB.pkl')
# 返回预测概率(%)
results = model_GaussianNB.predict_proba(X_pred) * 100
results
import numpy as np
# 将预测概率转换为 DataFrame
results_df = pd.DataFrame(np.around(results, 2), columns=['非会员概率', '会员概率'])
# 将预测概率添加到原数据集中最后一列
df_merged = pd.concat([df_pred.drop("用户是否为会员", axis=1), results_df['会员概率']], axis=1)
df_merged.sort_values(by="会员概率", ascending=False)

可以看到, DataFrame 最后一列已经添加了我们预测某位用户是潜在会员用户的概率。可以针对概率排序,将大于 50%的用户筛选出来,对这些潜在会员用户给予重点关照。

3、人工神经网络

除了使用高斯贝叶斯分类器,还可以使用人工神经网络来进行预测
同样,首先拿 user_fit.xlsx 看一看神经网络模型的分类效果:

from sklearn.neural_network import MLPClassifier# 构建神经网络分类器
model_MLPClassifier = MLPClassifier(activation='logistic', max_iter=1000, hidden_layer_sizes=(50, 50, 50))
# 使用训练集训练模型
model_MLPClassifier.fit(X_train, y_train)
# 使用验证集评估准确度
score_trainset = model_MLPClassifier.score(X_train, y_train)*100
score_testset = model_MLPClassifier.score(X_test, y_test)*100print("训练集预测准确率:%.2f%%" % score_trainset)
print("测试集预测准确率:%.2f%%" % score_testset)

使用最常见的 logistic 激活函数,建立一个含 3 个隐含层,每层 50 个神经元的网络。由于迭代次数较多,在线上实验环境中运行时间较长,你也可以调低数值用于测试。
使用全部数据进行训练,对非会员数据进行概率预测:

model_MLPClassifier.fit(X, y)
# 返回预测概率(%)
results = model_MLPClassifier.predict_proba(X_pred) * 100
# 将预测概率转换为 DataFrame
results_df = pd.DataFrame(np.around(results, 2), columns=['非会员概率', '会员概率'])
# 将预测概率添加到原数据集中最后一列
df_merged = pd.concat([df_pred.drop("用户是否为会员", axis=1), results_df['会员概率']], axis=1)
# 按会员概率降排序
df_merged.sort_values(by='会员概率', ascending=False)

相关文章:

实战项目-课程潜在会员用户预测(朴素贝叶斯&神经网络)

目录1、背景介绍2、朴素贝叶斯2.1 模型介绍2.2 模型实现3、人工神经网络1、背景介绍 目标:将根据用户产生的数据对课程潜在的会员用户(可能产生购买会员的行为)进行预测。 平台的一位注册用户是否购买会员的行为应该是建立在一定背景条件下…...

ESP32设备驱动-定时器与定时器中断

定时器与定时器中断 文章目录 定时器与定时器中断1、ESP32定时器介绍2、定时器相关API介绍3、软件准备4、硬件准备3、代码实现有时需要按时发生某些事情,这就是计时器和计时器中断发挥作用的地方。 定时器是一种中断。 它就像一个简单的时钟,用于测量和控制时间事件,提供精确…...

【JavaScript 逆向】安居客滑块逆向分析

声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标验证码:aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0以上均做了脱敏处…...

【STM32】【HAL库】遥控关灯1主机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 主机需要以下功能: 接收来自物联网平台的命令发送RF433信号给从机接收RF433信号和红外信号驱动舵机动作 方案设计…...

Java 初始化块

文章目录1、初识初始化块2、实例初始化块和构造器3、类初始化块1、初识初始化块 Java 使用构造器来对单个对象进行初始化操作,使用构造器先完成对整个 Java 对象的状态初始化,然后将 Java 对象返回给程序,从而让该 Java 对象的信息更加完整。…...

超详细讲解长度受限制的字符串函数(保姆级教程!!!)

超详细讲解长度受限制的字符串函数(保姆级教程!!!)长度受限制的字符串函数strncpy函数strncpy函数的使用strncpy函数的模拟实现strncat函数strncat函数的使用strncat函数的模拟实现strncmp函数strncmp函数的使用strncm…...

【c#】c#常用小技巧方法整理(4)——cmd命令提示符,c#调用cmd

CMD命令是一种命令提示符,CMD是command的缩写,位于系统System32的目录下,是大多数Windows操作系统中可用的命令行解释器应用程序。用于执行输入的命令。其中大多数命令通过脚本和批处理文件自动执行任务,执行高级管理功能&#xf…...

在项目中遇到的关于form表单的问题

前言 以下内容都是基于element Plus 和 vue3 一个form-item校验两个下拉框 有时候不可避免会遇到需要一个form-item校验两个下拉框的情况,比如: 这种情况下传统的校验已经无法实现,需要通过form表单提供的自定义校验来实现。以上面的必填…...

德国奔驰、博世和保时捷的员工年薪有多少?

点击 欧盟IT那些事 关注我们公告:因企鹅审核规定,本公众号从《德国IT那些事》更名为《欧盟IT那些事》。从职场新人到总裁,一个个盘。位于德国斯图加特的梅赛德斯-奔驰集团及其子公司梅赛德斯-奔驰是世界最知名的汽车制造商之一。奔驰车代表着…...

Mybatis与微服务注册

目录 一,Springboot整合MybatisPlus 创建商品微服务子模块 二,SpringBoot整合Freeamarker 三、SpringBoot整合微服务 &gateway&nginx 整合微服务之商品服务zmall-product 创建并配置网关gateway服务 安装配置SwitchHosts 安装配置Windo…...

JAVA练习47-合并两个有序数组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-合并两个有序数组 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月11日练习…...

右键菜单管理 - Win系统

右键菜单管理 - Win系统前言软件工具管理右键菜单360右键管理右键管家前言 Windows系统可以借助软件工具对右键菜单进行管理,可对指定的右键菜单进行删除和恢复。下面以Win10系统为例介绍管理方法。 注意:使用本文提及的工具将某软件的右键菜单删除后&…...

背包问题求方案数、具体方案

背包问题求方案数、具体方案01背包问题求体积恰好等于V的方案数完全背包问题求体积恰好等于V的方案数01背包问题求最优选法的方案数完全背包问题求最优选法的方案数01背包问题求具体方案01背包问题求体积恰好等于V的方案数 原题链接AcWing278. 数字组合 考虑状态表示&#x…...

电商导购CPS,淘宝联盟如何跟单实现用户和订单绑定

前言 大家好,我是小悟 做过自媒体的小伙伴都知道,不管是发图文还是发短视频,直播也好,可以带货。在你的内容里面挂上商品,你自己都不需要囤货,如果用户通过这个商品下单成交了,自媒体平台就会…...

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,

文章目录1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统1.1 变量:readonly定义只读变量,unset删除变量1.2 函数:shell脚本传递的参数中包含空格&am…...

刷题记录:牛客NC208250牛牛的最美味和最不美味的零食

传送门:牛客 题目描述: 牛牛为了减(吃)肥(好),希望对他的零食序列有更深刻的了解,所以他把他的零食排成一列,然后对每一 个零食的美味程度都打了分,现在他有可能执行两种操作&…...

微搭低代码从入门到精通08-轮播容器

我们上一篇讲解了基础布局组件,讲解了普通容器和文本组件的用法,本篇我们继续介绍布局组件。 小程序中经常会有个功能是轮播图展示的功能,多张图片可以顺序进行切换。我们学习使用轮播容器的时候,先考虑切换的图片从哪来&#xf…...

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测 目录分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测分类效果基本介绍模型描述程序设计参考文献分类效果 基本介绍 1.Matlab实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测&…...

华为10年经验测试工程师,整理出来的python自动化测试实战

前言 全书共分11章,第一章是基础,了selenium家谱,各种组件之间的关系以及一些必备知识。第二章告诉如何开始用python IDLE写程序以及自动化测试环境的搭建。第三章是webdriver API,我花了相当多时间对原先的文档,冗余…...

OpenCV杂谈 - 如何导出图像到内存中其他结构

前言 最近在net环境使用OpenCV,记录些疑难杂点. ​​​ 一、OpenCV主要结构 Mat 二、Cols,Rows 和 Width,Hight 三、导入\导出到内存中其他结构 四、按矩形 在Mat之间复制 总结 一、OpenCV主要结构 Mat Mat是OpenCV中的主要结构. 主要有两个用途. 1 存储图片信息,2 存…...

Session与Cookie的区别(四)

咖啡寄杯的烦恼 虽然店里生意还可以,但小明无时无刻不想着怎么样发大财赚大钱,让店里的生意变得更好。 他观察到最近好多便利商店开始卖起了咖啡,而且时不时就买一送一或是第二件半价,并且贴心地提供了寄杯的服务。 寄杯就是指说你…...

Linux 文件锁 - fcntl

什么是文件锁&#xff1f; 即锁住文件&#xff0c;不让其他程序对文件做修改&#xff01; 为什么要锁住文件&#xff1f; 案例&#xff0c;有两个程序&#xff0c;都对一个文件做写入操作。 #include <unistd.h> #include <stdio.h> #include <stdlib.h> …...

CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享

%% 二维元胞自动机%imagesc(a)的色度矩阵a中0->256由蓝变黄% 规则&#xff0c;先把中间点置为1&#xff0c;每一时间每一点如果%周围八个点和为偶数&#xff0c;则变为0&#xff0c;为奇数则变为 1% 颜色控制clc, clearMap [1 1 1; 0 0 0];% [0 0 0] is black, [1 1 1] is …...

OpenStack云平台搭建(6) | 部署Neutron

目录 1.在控制节点登录数据库配置 2.要创建服务证书&#xff0c;完成这些步骤 3.创建网络服务API端点&#xff1a; 4.安装网络组件 5.配置neutron组件 6.配置 Modular Layer 2 (ML2) 插件 7.配置Linuxbridge代理 8.配置DHCP代理 9.配置元数据代理 10.编辑/etc/nova/no…...

Lesson 05.Configuring the Oracle Network Environment

Lesson 05. Configuring the Oracle Network Environment 文章目录Lesson 05. Configuring the Oracle Network Environment1. 监听程序的配置文件有哪些&#xff0c;如何命名&#xff0c;保存在什么位置&#xff1f;2. Oracle 网络的服务名称文件是如何命名的&#xff0c;需要…...

理论五:接口vs抽象类的区别,如何用普通的类模拟抽象类和接口

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模…...

【Hello Linux】 Linux的权限以及Shell原理

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍Linux的基础命令 Linux的权限以及Shell原理Shell的运行原理权限Linux中权限的概念如何切换用户如何提升当前操作的权限如何添加信任…...

【STM32】【HAL库】遥控关灯2 分机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…...

代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

93.复原IP地址 看完题后的思路 典型分割问题略lue略剪枝条件 sub&#xff1a; 1&#xff09; 不是一位首字母为0 2&#xff09;大于三位 3&#xff09;介于0-255之间 4) 当已分割得到3个时&#xff0c;第四个直接从startIndex到末尾就行 代码 ArrayList<String> slist…...

Unity UI合批的问题

今天看到一个问题&#xff0c;主要说的是Unity中的UI资源合批的问题之前一直以为主要和UI资源在Hierarchy中的排列顺序有关&#xff0c;但其实这并不是最主要的&#xff0c;因为Unity会对同一个Canvas下的UI进行排序&#xff08;注&#xff1a;不同Canvas下的资源是不能够合批的…...

做网站服务器是什么/活动营销的方式有哪些

Java基础核心笔记总结 由于篇幅限制&#xff0c;我就只以截图展示目录内容以及部分笔记内容&#xff0c;获取完整版王者级核心宝典只需要点击点赞关注即可获取领取方式&#xff01; 在这个部分我们总结了Java的基础知识&#xff0c;涵盖了&#xff1a;概述、开发环境、开发环境…...

政府平台网站建设建议/自己如何制作网页

C&#xff0c;libpq - C 库&#xff0c;ECPG - C 中的嵌入式 SQL C&#xff0c;把 C 用于可扩展性 canceling&#xff0c;取消进行中的查询 SQL command&#xff0c;取消进行中的查询 cardinality&#xff0c;数组函数和操作符 CASCADE&#xff0c;依赖跟踪 with DROP&am…...

wordpress增加类/每日英语新闻

最近有个哥们给我看他们最近在做的一个游戏&#xff0c;其中有这样一段镜头https://www.zhihu.com/video/1171378736917364736运用到了一个很常用的过场方式&#xff0c;就是平时我们所说的无缝过场。过场动画不通过黑屏转换&#xff0c;而是通过运镜来代入。这是一种比较容易实…...

二手书网站建设报告/股票指数是什么意思

1、 打开工具inSSIDer&#xff0c;勾选指定WIFI 2、 在Time Graph页签中查看WIFI信号强度&#xff0c;一般信号强度在-30dbm-120dbm之间&#xff0c;正常信号强度应该是-40dbm-85dbm之间&#xff0c;小于-90dbm就很差了&#xff0c;几乎无法连接&#xff0c;Android具体评判标准…...

浪起网站建设/seo排名赚app靠谱吗

#include "stdafx.h" #include <iostream> #include <string>using namespace std; void other() {static int a2;//静态局部变量&#xff0c;具有全局寿命&#xff0c;局部作用域&#xff0c;只在第一次进入函数时被初始化int c10;//局部变量&#xff0…...

浙江建筑信息港官网/免费测试seo

前几天微博发生了一起大的系统故障&#xff0c;很多技术的朋友都比较关心&#xff0c;其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Service(1)概括的那几个范围&#xff0c;James第一条经验“Design for failure”是所有互联网架构成功的一个…...