文章目录

前言

一、数据预处理

二、变量选择

查看特征值与目标值之间的相关关系

​选取特征值

进行one-hot编码后目标值与特征值的相关关系

​查看类别型变量的所有类别及类别分布概率情况

对数值型变量绘制直方图 查看数据分布

将未进行独热编码的特征删除

三、建模(训练逻辑回归模型)

四、模型评估

查看预测结果

混淆矩阵及可视化

计算ROC曲线AUC值并可视化


前言

本文运用numpy,pandas库对相关数据进行处理,使用sklearn库基于机器学习中的逻辑回归方法对天猫优惠券的使用情况进行预测,最后用matplotlib和seaborn库进行可视化的展示。


一、数据预处理

数据字段说明

ID 记录编码

age 年龄

job 职业

marital 婚姻状态

default 花呗是否有违约

returned 是否有过退货

loan 是否使用花呗结账

coupon_used_in_last6_month 过去六个月使用的优惠券数量

coupon_used_in_last_month 过去一个月使用的优惠券数量

coupon_ind 该次活动中是否有使用优惠券

#导入要使用的模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
import seaborn as sns#设置正常显示中文和负号
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
#⽤来正常显示中⽂标签
plt.rcParams['axes.unicode_minus'] = False
#⽤来正常显示负号 #有中⽂出现的情况,需要u'内容'#设置输出全部结果 而非只有最后一个
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
#导入数据
data = pd.read_csv('/基于逻辑回归的天猫优惠券使用情况预测/L2_Week3.csv')#查看数据
data.head()

#查看数据是否为空值
data.isnull().sum()

#coupon_ind为要预测的目标值
#查看目标值的分布情况
data['coupon_ind'].value_counts(1)

二、变量选择

查看特征值与目标值之间的相关关系

#查看特征值与目标值的相关关系
#进行one—hot编码前
sns.heatmap(data.corr()[['coupon_ind']])

选取特征值

#选取特征值
X = data.iloc[:,0:9]
X.head()

#将类别型变量进行哑变量处理
job = pd.get_dummies(X['job'])
marital = pd.get_dummies(X['marital'])
default = pd.get_dummies(X['default'])
returned = pd.get_dummies(X['returned'])
loan = pd.get_dummies(X['loan'])#将处理好的哑变量与原来的数据按列连接
XX = pd.concat([X,job,marital,default,returned,loan],axis=1)

进行one-hot编码后目标值与特征值的相关关系

XXX = pd.concat([XX,data['coupon_ind']],axis=1)
sns.heatmap(XXX.corr()[['coupon_ind']])

查看类别型变量的所有类别及类别分布概率情况

X['job'].unique()
data['job'].value_counts(1)X['marital'].unique()
data['marital'].value_counts(1)X['default'].unique()
data['default'].value_counts(1)X['returned'].unique()
data['returned'].value_counts(1)X['loan'].unique()
data['loan'].value_counts(1)

构建简单for循环 对每个分类变量查看各数据出现的次数 同时绘制直方图。

col_cate = ['job', 'marital', 'default', 'returned', 'loan']plt.figure(figsize=(25,20),dpi=300)
plt.subplots_adjust(wspace =0.3, hspace =0.3)
for n,i in enumerate(X[col_cate].columns):plt.subplot(3,2,n+1)plt.title(i,fontsize=15)plt.grid(linestyle='--')X[col_cate][i].hist(color='darkcyan',alpha=0.5)

对数值型变量绘制直方图 查看数据分布

col_num = ['age', 'coupon_used_in_last6_month', 'coupon_used_in_last_month']
X[col_num].hist(bins=20,figsize=(15,10),color ="darkcyan")

将未进行独热编码的特征删除

x = [2,3,4,5,6]
XX.drop(XX.columns[x], axis=1, inplace=True)
XX

三、建模(训练逻辑回归模型)

#分离训练集与测试集
XX_train,XX_test,Y_train,Y_test = train_test_split(XX,data['coupon_ind'],train_size=0.75)
#训练逻辑回归模型,这里由于目标值样本不均衡,采用加权的方式建立模型
model = LogisticRegression(C=1e4,random_state=100,class_weight='balanced')
model.fit(XX_train, Y_train)

#查看训练集的概率
prob = model.predict_proba(XX_train)
pd.DataFrame(prob).apply(lambda x:round(x,4))

四、模型评估

查看预测结果

#查看预测结果的准确率、召回率、f1-score
pred = model.predict(XX_test)
print(classification_report(Y_test,pred,labels=[1,0],target_names=['是','否']))

混淆矩阵及可视化

#做出混淆矩阵
confusion = confusion_matrix(Y_test,pred)
confusion

#混淆矩阵可视化
plt.matshow(confusion,cmap=plt.cm.Blues, alpha=0.8)
plt.title('混淆矩阵')
plt.colorbar()
plt.ylabel('预测')
plt.xlabel('实际')
plt.show()

计算ROC曲线AUC值并可视化

print('截距为:',model.intercept_)
print('回归系数为:',model.coef_)
print('训练集正确率',model.score(XX_train,Y_train))
print('预测值正确率',accuracy_score(Y_test,pred))

#计算ROC曲线AUC值
from sklearn.metrics import roc_curve,auc
fpr,tpr,threshold = roc_curve(Y_test,pred)
roc_auc = auc(fpr,tpr)
print('ROC曲线AUC值:',roc_auc)

plt.figure(figsize=(6, 5))
# 绘制ROC曲线。
plt.plot(fpr, tpr, label="ROC")
# 绘制(0, 0)与(1, 1)两个点的连线,该曲线(直线)为随机猜测的效果。
plt.plot([0,1], [0,1], lw=2, ls="--", label="随机猜测")
# 绘制(0, 0), (0, 1), (1, 1)三点的连线(两条线),这两条线构成完美的roc曲线(auc的值为1)。
plt.plot([0, 0, 1], [0, 1, 1], lw=2, ls="-.", label="完美预测")
plt.xlim(-0.01, 1.02)
plt.ylim(-0.01, 1.02)
plt.xticks(np.arange(0, 1.1, 0.1))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xlabel('False Positive Rate(FPR)', fontsize=13)
plt.ylabel('True Positive Rate(TPR)', fontsize=13)
plt.grid()
plt.title(f"ROC曲线-AUC值为{auc(fpr, tpr):.5f}", fontsize=14)
plt.legend()
plt.show()


基于逻辑回归的天猫优惠券使用情况预测相关推荐

  1. 天猫优惠券使用情况预测的逻辑回归分析

    天猫优惠券使用情况预测的逻辑回归分析 背景 基于25317条天猫用户的基本特征.行为信息,使用python分析使用优惠券消费行为特征,并建立逻辑回归模型进行预测. 分析思路 数据展示 #导入要使用的模 ...

  2. 基于逻辑回归的金融风控贷款违约预测分析(笔记)

    一.背景与思路 (一)背景 核心问题:对贷款偿债能力的评估 1. 方法:利用逻辑回归(理解简单,可解释性强) 2. 信用评分卡的构建 金融风控 定性分析 逻辑回归 定量分析 信用评分卡 (二)流程 1 ...

  3. Machine Learning | 基于逻辑回归做二分类进行癌症预测

    导入包 import pandas as pd import numpy as np from sklearn.datasets import load_boston from sklearn.lin ...

  4. 机器学习笔记-基于逻辑回归的分类预测

    天池学习笔记:AI训练营机器学习-阿里云天池 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有&quo ...

  5. 基于逻辑回归的鸢尾花分类预测

    基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 1.2 逻辑回归的应用 2 学习目标 3 代码流程 4 算法实战 4.1 Demo实践 Step1:库函数导入 Step2:模 ...

  6. 基于逻辑回归模型对鸢尾花数据集进行分类

    基于逻辑回归模型对鸢尾花数据集进行分类 理论知识 不做过多赘述,相关知识有:指数分布族.GLM建模(分布函数+连接函数,对于本例来说是二项分布+sigmoid函数).最大似然函数.交叉熵函数(评估逻辑 ...

  7. 验证基于逻辑回归的隐马尔可夫模型的心音信号切分算法(literature study)

    这篇文章展示的是基于逻辑回归的隐马尔可夫模型(Logistic regression based hidden semi-Markovmodel (HSMM))心音信号切分方法. 参考文章可以到文末查 ...

  8. 上可以替代mobaxterm_电能替代 | 基于逻辑回归模型的电能替代用户辨识研究

    [抢先看]<浙江电力>2020年第1期目录及重点关注文章 [抢先看]<浙江电力>2020年第2期目录及重点关注文章 征文 |"储能技术规模化应用技术"专题征 ...

  9. 基于逻辑回归的新闻数据集分类

    目录 1. 作者介绍 2. 逻辑回归 2.1 逻辑回归 2.2 逻辑回归算法 3. 实验过程 3.1 fetch_20newsgroups(20类新闻文本)数据集的简介 3.2 实验代码 3.3 运行 ...

最新文章

  1. 【深度学习】多层感知器高级使用
  2. tkinter绑定鼠标滚轮滚动事件
  3. linux进程VSZ(虚拟内存)
  4. C# 去除文件或 文件夹只读属性
  5. Python正则表达式中的贪心模式和非贪心模式
  6. PHP密码问题陈婷代码_登录中利用JS前端加密PHP后端解密保证数据非明文传输的安全方法...
  7. leetcode 326 [easy]--- Power of Three
  8. 利用计算机及时采集检测数据,计算机基础_课件.ppt
  9. 中国农业银行研发中心面试经历分享
  10. 优动漫PAINT实现制图化繁为简的一波骚操作
  11. 37. Hard Disk Drives
  12. 1052 卖个萌 (20分)特殊符号输入
  13. Android 原生和 JS 交互实践
  14. 云+未来峰会安全专场总结:智慧安全护航企业数字化转型
  15. 登录+注册界面的实现(代码)
  16. android中终端命令大全,Android系统在超级终端下必会的命令大全(八)
  17. IDEA 设置4个空格代替tab
  18. IntelliJ IDEA 自动导包快捷键和导入jar包方式
  19. 100G波分复用(WDM)宽带传输设备
  20. 用一个vector删除另一个vector中的元素

热门文章

  1. 抽奖随机滚动_专为年会度身定制的Excel抽奖器,姓名和照片同步随机滚动
  2. 图片或者spine动画出现白边
  3. 软件学院软件工程学费_为什么我不去软件工程学院
  4. 手头紧!贷款还不上该怎么办?影响征信吗?
  5. JMeter笔记三:常见的四种Jmeter参数化方式
  6. redis 平滑重启
  7. [React] antd DatePicker 时间日期控件,禁用今日之前/之后的日期
  8. Unknown Intel PCH (0x7110) detected
  9. Genesis与Wisemont Capital进行深入探讨
  10. python合并两个文件夹