机器学习:基于逻辑回归(Logistic Regression)对股票客户流失预测分析

news2024/11/18 20:25:58

在这里插入图片描述

基于逻辑回归对股票客户流失预测分析

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(三):基于线性回归对波士顿房价预测
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):线性回归分析女性身高与体重之间的关系
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习(二十一):LightGBM算法原理(附案例实战)

文章目录

  • 基于逻辑回归对股票客户流失预测分析
  • 1、逻辑回归模型原理
  • 2、实验环境
  • 3、模型LogisticRegression函数介绍
  • 4、逻辑回归实战案例
    • 4.1案例背景
    • 4.2数据读取和数据集划分
    • 4.3模型建立与预测评价
    • 4.4绘制ROC曲线


1、逻辑回归模型原理

逻辑回归(Logistic Regression)是一种二分类的监督学习算法,用于预测样本的概率属于某一类别的概率。相比于线性回归,逻辑回归可以更好地处理分类问题。

逻辑回归的核心思想是,通过对样本特征进行线性组合,得到一个连续的预测值,然后通过一个函数将其映射到0和1之间的概率值。这个映射函数通常采用Sigmoid函数,其数学表达式为:
在这里插入图片描述

其中 y y y为线性组合的结果, e e e为自然常数。在这里插入图片描述

逻辑回归模型的数学表达式为:
在这里插入图片描述

其中, θ \theta θ是需要学习的参数, x x x是输入的样本特征向量。

我们的目标是最大化训练样本的似然函数,即:
在这里插入图片描述

其中, m m m是训练样本数, y ( i ) y^{(i)} y(i)为样本 i i i的真实标签。

在这里插入图片描述

我们的目标是最大化对数似然函数,即:
在这里插入图片描述

可以使用梯度下降等优化算法来求解最优参数 θ \theta θ

逻辑回归的优点包括:

  • 简单易懂,容易解释
  • 计算量小,速度快
  • 适用于线性可分和线性不可分的二分类问题

逻辑回归的缺点包括:

  • 对异常值敏感
  • 对特征相关性敏感
  • 不能很好地处理多分类问题

2、实验环境

python 3.9

anaconda

jupyter notebook

3、模型LogisticRegression函数介绍

LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1,
                               class_weight=None, random_state=None, solver= 'liblinear',max_iter=100, 
                               multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
  • penalty:为Logistic回归模型的目标函数添加正则化惩罚项,与线性回归模型类似,默认为l2正则

  • dual:bool类型参数,是否求解对偶形式,默认为False,只有当penalty参数为’l2’、solver参数为’liblinear’时,才可使用对偶形式

  • tol:用于指定模型跌倒收敛的阈值

  • C:用于指定惩罚项系数Lambda的倒数,值越小,正则化项越大

  • fit_intercept:bool类型参数,是否拟合模型的截距项,默认为True

  • intercept_scaling:当solver参数为’liblinear’时该参数有效,主要是为了降低X矩阵中人为设定的常数列1的影响

  • class_weight:用于指定因变量类别的权重,如果为字典,则通过字典的形式{class_label:weight}传递每个类别的权重;如果为字符串’balanced’,则每个分类的权重与实际样本中的比例成反比,当各分类存在严重不平衡时,设置为’balanced’会比较好;如果为None,则表示每个分类的权重相等

  • random_state:用于指定随机数生成器的种子

  • solver:用于指定求解目标函数最优化的算法,默认为’liblinear’,还有其他选项,如牛顿法’newton-cg’、L-BFGS拟牛顿法’lbfgs’

  • max_iter:指定模型求解过程中的最大迭代次数, 默认为100

  • multi_class:如果因变量不止两个分类,可以通过该参数指定多分类问题的解决办法,默认采用’ovr’,即one-vs-rest方法,还可以指定’multinomial’,表示直接使用多分类逻辑回归模型(Softmax分类)

  • verbose:bool类型参数,是否输出模型迭代过程的信息,默认为0,表示不输出

  • warm_start:bool类型参数,是否基于上一次的训练结果继续训练模型,默认为False,表示每次迭代都是从头开始

  • n_jobs:指定模型运算时使用的CPU数量,默认为1,如果为-1,表示使用所有可用的CPU

4、逻辑回归实战案例

4.1案例背景

在进行每一笔股票交易的时候,交易者(股民)都是要付给开户所在的证券公司一些手续费的,虽然单笔交易的手续费并不高,然而股票市场每日都有巨额的成交量,使得每一笔交易的手续费汇总起来的数目相当可观,而这一部分收入对于一些证券公司来说很重要,甚至可以占到所有营业收入50%以上,因此证券公司对于客户(也即交易者)的忠诚度和活跃度是很看重的。

如果一个客户不再通过该证券公司交易,也即该客户流失了,那么对于证券公司来说便损失了一个收入来源,因此证券公司会搭建一套客户流失预警模型来预测交易者是否会流失,从而对于流失概率较大的客户进行相应的挽回措施,因为通常情况下,获得新客户的成本比保留现有客户的成本要高的多。

4.2数据读取和数据集划分

读取数据并展示前五行数据

import pandas as pd
df = pd.read_excel('股票客户流失.xlsx')
df.head()

在这里插入图片描述

划分特征变量和目标变量

X = df.drop(columns='是否流失') 
y = df['是否流失']   

划分训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)  # 设置random_state使得每次划分的数据一样

X_train.head()  # 显示训练集X_train的前5行

在这里插入图片描述

4.3模型建立与预测评价

模型搭建

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)

在这里插入图片描述
预测数据结果

y_pred = model.predict(X_test)
print(y_pred[0:100])  # 打印预测内容的前100个看看

在这里插入图片描述

放到一个DataFrame里进行查看比对

a = pd.DataFrame()  # 创建一个空DataFrame 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()  # 可以看到此时前5个预测准确度为80%

在这里插入图片描述

看全部的预测准确度

from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)

在这里插入图片描述
预测概率

y_pred_proba = model.predict_proba(X_test)  
y_pred_proba[0:5]

在这里插入图片描述
查看概率的方式

a = pd.DataFrame(y_pred_proba, columns=['不流失概率', '流失概率'])
a.head()

在这里插入图片描述
查看流失的概率

y_pred_proba[:,1]

在这里插入图片描述

4.4绘制ROC曲线

计算ROC曲线需要的假警报率(fpr)、命中率(tpr)及阈值(thres)

from sklearn.metrics import roc_curve
fpr, tpr, thres = roc_curve(y_test, y_pred_proba[:,1])
a = pd.DataFrame()  # 创建一个空DataFrame 
a['阈值'] = list(thres)
a['假警报率'] = list(fpr)
a['命中率'] = list(tpr)
a.head()

在这里插入图片描述

绘制ROC曲线

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文
plt.plot(fpr, tpr)  # 通过plot()函数绘制折线图
plt.title('ROC曲线')  # 添加标题,注意如果要写中文,需要在之前添加一行代码:plt.rcParams['font.sans-serif'] = ['SimHei']
plt.xlabel('FPR')  # 添加X轴标签
plt.ylabel('TPR')  # 添加Y轴标
plt.show()

在这里插入图片描述

求出模型的AUC值

from sklearn.metrics import roc_auc_score
score = roc_auc_score(y_test, y_pred_proba[:,1])
score

在这里插入图片描述


📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm install报错

出现这个错误,我百度之后得到的解决方案是: 在node.js安装目录下找到node_modules文件夹并删除 但是当我操作完成之后,却出现了另外一个ERROR: 于是我又还原了原来的node_modules文件夹,于是又报一开始的错 仔细瞅瞅…

Netty 单机百万连接测试

1.Netty框架简介 1.1.Netty简介 netty是jboss提供的一个java开源框架,netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可用性的网络服务器和客户端程序。也就是说netty是一个基于nio的编程框架,使用netty可以快…

NFC 学习笔记 5 MFRC522读写器2 NDEF

NDEF简介 NDEF(NFC Data Exchange Format)是一种标准化的数据格式,用于将数据存储在NFC标签或智能手机中。该格式是NFC论坛定义的,目的是在不同的NFC设备之间交换信息。 NDEF格式可以存储各种类型的数据,例如URL、文本…

面对市场内卷,不同品牌应该如何做客户增长?

后疫情时代,我国新生人口减少、人口老龄化加剧,chatgpt火爆和AI替代论盛行,市场上,口红效应依旧繁荣,消费者的延迟满足、替代性满足成为常见心理,面对宏观的不确定性,人们在消费上更需要确定性的…

github 基础

github 基础 前面讲了 git 的基本使用,这里简单的提一下 github 的基本使用,主要还是 pull 和 push 两个部分。其中 pull 好像有了一些变化,现在似乎是需要 rebase 而不是自动就帮你做了……?不过 rebase 的部分之后再提。 当然…

Vuex实现数据共享

目录 一:index.js的创建 二:index.js的引入 三:Count.vue 四:App.vue的使用 五:mapstate等的使用 五:多组件数据共享(模块化编程) vc通过dispatch联系actions,acti…

Python小姿势 - ###### 随机选取的知识点:Python日期时间处理

随机选取的知识点:Python日期时间处理 Python日期时间处理:一种更简单的方式 日期和时间处理是许多程序中必不可少的部分。Python提供了一个标准库来处理日期和时间,这个库叫做datetime,它提供了一些类来处理不同的日期和时间格式…

远程访问及控制(SSH)

远程访问及控制(SSH) 一、SSH远程管理二、SSH服务1、ssh远程登录方式2、scp远程复制3、sftp安全FTP4、sshd配置文件5、ssh密钥对配置5.1 ssh密钥对免交互登录 三、TCP wrappers 访问控制1、**TCP wrappers (TCP封套)**2、**TCP wr…

会话与会话技术(Cookie)

Web应用中的会话过程指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程 为保存会话过程产生的数据,Servlet提供了两个用于保存会话数据的对象,分别是Cookie和Session 1、Cookie对象 Cookie是一种会话技术…

SS524V100 RTL8152B(USB转网卡)驱动移植

目录 前言 1. 内核下 USB Host 配置过程 2. 内核下 RTL8152 驱动配置 3. 重新编译内核 4. 测试USB转网卡 5. 总结 前言 本文主要是描述 SS524V100 对 RTL8152B(百兆网卡) 开发、移植的过程。 1. SS524V100 的 USB 2.0 支持 Host 模式; 2. 内核默认自带驱动…

0环境教你怎么安装配置GPU环境运行车流量检测代码

项目效果: python车流量检测双向车流计数 1、环境配置 1.1 安装显卡加速工具 (1) 安装CUDA和cudnn NVIDIA CUDA 深度神经网络库 (cuDNN) 是经 GPU 加速的深度神经网络基元库。cuDNN 可大幅优化标准例程(例如用于前向传播和反向传播的卷积层、池化层、…

4月23日作业

#include <iostream> #include <cstring> using namespace std; class Student //学生类 { private: string name; //姓名 int year; //年龄 double sorce; //分数 public: Student (){} //无参构造 Student(string a,int b,double c):name(a),y…

五分钟学会在微信小程序中使用 vantUI 组件库

前言 我们在开发微信小程序时&#xff0c;设计和实现好用的用户界面无疑是至关重要的一步。但是微信小程序官方自带的 UI 组件库无法满足很多使用场景&#xff0c;这个时候就需要我们使用一些第三方的 UI 组件库。而 vant Weapp 作为一款优秀的前端 UI 组件库&#xff0c;可以帮…

MP长篇综述 | 植物泛基因组及其应用

2022年12月15日&#xff0c;中山大学史俊鹏副教授、中国科学院遗传与发育生物学研究所田志喜研究员、中国农业大学赖锦盛教授和上海师范大学黄学辉教授共同撰文&#xff0c;在Molecular Plant杂志发表了题为“Plant pan-genomics and its applications”的长篇综述。该论文对植…

(Ubuntu22.04 Jammy)安装ROS2 Humble

文章目录 (Ubuntu22.04 Jammy)安装ROS2 (Humble)版本一、设置本地区域二、设置源三、安装ROS2软件包四、环境设置五、测试用例Talker-listener 六、卸载ros2 (Ubuntu22.04 Jammy)安装ROS2 (Humble)版本 提示&#xff1a;以下内容是已经安装了ubuntu22.04 下进行安装ros2 一、设…

iptables防火墙和Firewalld

引言 在 Internet 中&#xff0c;企业通过各种应用系统来为用户提供各种服务&#xff0c;如 Web 网站、电子邮件系统、FTP 服务器、数据库系统等&#xff0c;那么&#xff0c;如何来保护这些服务器&#xff0c;过滤企业不需要的访问甚至是恶意的入侵呢&#xff0c;接下来&#…

设计模式--建造者模式

项目需求 盖房需求 (1) 需要建房子:过程为 打地基 砌墙 封顶 (2) 房子有高正各样的,比如 平房和高楼 建房子的过程虽然都一样 但是要求不要相同的细节 传统方式 public abstract class TraditionBuild {//打地基public abstract void foundation();//砌墙public abstract voi…

Linux进程的fork、exit、wait等函数;区分父子进程;GDB调试多进程

Linux系统中进程可以创建子进程。 1. fork函数&#xff1a;创建新进程 #include<sys/types.h> #include<unistd.h>pid_t fork(void); /* 功能&#xff1a;一个进程创建新进程。原进程为父进程&#xff0c;新进程为子进程。 返回值&#xff1a;成功&#xff1a;子…

SuperMap iObjects Docker打包全攻略

SuperMap iObjects Docker打包全攻略 文章目录 SuperMap iObjects Docker打包全攻略说明开始打包iObjects容器启动容器参考 说明 此教程编写时使用的iObjects版本为 10.2.1 &#xff0c;理论高版本同样支持&#xff0c;具体自测。基础镜像为 Docker 官方 ubuntu:16.04完整版。…

C++ 类和对象(中)构造函数 和 析构函数

上篇链接&#xff1a;C 类和对象&#xff08;上&#xff09;_chihiro1122的博客-CSDN博客 类的6个默认成员函数 我们在C当中&#xff0c;在写一些函数的时候&#xff0c;比如在栈的例子&#xff1a; 如上述例子&#xff0c;用C 返回这个栈是否为空&#xff0c;直接返回的话&am…