基于邏輯回歸對股票客戶流失預(yù)測分析
作者:i阿極
作者簡介:Python領(lǐng)域新星作者、多項比賽獲獎?wù)撸翰┲鱾€人首頁
??????如果覺得文章不錯或能幫助到你學(xué)習(xí),可以點贊??收藏??評論??+關(guān)注哦!??????
??????如果有小伙伴需要數(shù)據(jù)集和學(xué)習(xí)交流,文章下方有交流學(xué)習(xí)區(qū)!一起學(xué)習(xí)進(jìn)步!??
專欄案例:機器學(xué)習(xí)案例 |
---|
機器學(xué)習(xí)(一):線性回歸之最小二乘法 |
機器學(xué)習(xí)(二):線性回歸之梯度下降法 |
機器學(xué)習(xí)(三):基于線性回歸對波士頓房價預(yù)測 |
機器學(xué)習(xí)(四):基于KNN算法對鳶尾花類別進(jìn)行分類預(yù)測 |
機器學(xué)習(xí)(五):基于KNN模型對高爐發(fā)電量進(jìn)行回歸預(yù)測分析 |
機器學(xué)習(xí)(六):基于高斯貝葉斯對面部皮膚進(jìn)行預(yù)測分析 |
機器學(xué)習(xí)(七):基于多項式貝葉斯對蘑菇毒性分類預(yù)測分析 |
機器學(xué)習(xí)(十四):基于邏輯回歸對超市銷售活動預(yù)測分析 |
機器學(xué)習(xí)(十五):基于神經(jīng)網(wǎng)絡(luò)對用戶評論情感分析預(yù)測 |
機器學(xué)習(xí)(十六):線性回歸分析女性身高與體重之間的關(guān)系 |
機器學(xué)習(xí)(十七):基于支持向量機(SVM)進(jìn)行人臉識別預(yù)測 |
機器學(xué)習(xí)(十八):基于邏輯回歸對優(yōu)惠券使用情況預(yù)測分析 |
機器學(xué)習(xí)(十九):基于邏輯回歸對某銀行客戶違約預(yù)測分析 |
機器學(xué)習(xí)(二十):基于樸素貝葉斯對花瓣花萼的寬度和長度分類預(yù)測 |
機器學(xué)習(xí)(二十一):LightGBM算法原理(附案例實戰(zhàn)) |
1、邏輯回歸模型原理
邏輯回歸(Logistic Regression)是一種二分類的監(jiān)督學(xué)習(xí)算法,用于預(yù)測樣本的概率屬于某一類別的概率。相比于線性回歸,邏輯回歸可以更好地處理分類問題。
邏輯回歸的核心思想是,通過對樣本特征進(jìn)行線性組合,得到一個連續(xù)的預(yù)測值,然后通過一個函數(shù)將其映射到0和1之間的概率值。這個映射函數(shù)通常采用Sigmoid函數(shù),其數(shù)學(xué)表達(dá)式為:
其中 y y y為線性組合的結(jié)果, e e e為自然常數(shù)。
邏輯回歸模型的數(shù)學(xué)表達(dá)式為:
其中, θ \theta θ是需要學(xué)習(xí)的參數(shù), x x x是輸入的樣本特征向量。
我們的目標(biāo)是最大化訓(xùn)練樣本的似然函數(shù),即:
其中, m m m是訓(xùn)練樣本數(shù), y ( i ) y^{(i)} y(i)為樣本 i i i的真實標(biāo)簽。
我們的目標(biāo)是最大化對數(shù)似然函數(shù),即:
可以使用梯度下降等優(yōu)化算法來求解最優(yōu)參數(shù) θ \theta θ。
邏輯回歸的優(yōu)點包括:
- 簡單易懂,容易解釋
- 計算量小,速度快
- 適用于線性可分和線性不可分的二分類問題
邏輯回歸的缺點包括:
- 對異常值敏感
- 對特征相關(guān)性敏感
- 不能很好地處理多分類問題
2、實驗環(huán)境
python 3.9
anaconda
jupyter notebook
3、模型LogisticRegression函數(shù)介紹
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回歸模型的目標(biāo)函數(shù)添加正則化懲罰項,與線性回歸模型類似,默認(rèn)為l2正則
-
dual:bool類型參數(shù),是否求解對偶形式,默認(rèn)為False,只有當(dāng)penalty參數(shù)為’l2’、solver參數(shù)為’liblinear’時,才可使用對偶形式
-
tol:用于指定模型跌倒收斂的閾值
-
C:用于指定懲罰項系數(shù)Lambda的倒數(shù),值越小,正則化項越大
-
fit_intercept:bool類型參數(shù),是否擬合模型的截距項,默認(rèn)為True
-
intercept_scaling:當(dāng)solver參數(shù)為’liblinear’時該參數(shù)有效,主要是為了降低X矩陣中人為設(shè)定的常數(shù)列1的影響
-
class_weight:用于指定因變量類別的權(quán)重,如果為字典,則通過字典的形式{class_label:weight}傳遞每個類別的權(quán)重;如果為字符串’balanced’,則每個分類的權(quán)重與實際樣本中的比例成反比,當(dāng)各分類存在嚴(yán)重不平衡時,設(shè)置為’balanced’會比較好;如果為None,則表示每個分類的權(quán)重相等
-
random_state:用于指定隨機數(shù)生成器的種子
-
solver:用于指定求解目標(biāo)函數(shù)最優(yōu)化的算法,默認(rèn)為’liblinear’,還有其他選項,如牛頓法’newton-cg’、L-BFGS擬牛頓法’lbfgs’
-
max_iter:指定模型求解過程中的最大迭代次數(shù), 默認(rèn)為100
-
multi_class:如果因變量不止兩個分類,可以通過該參數(shù)指定多分類問題的解決辦法,默認(rèn)采用’ovr’,即one-vs-rest方法,還可以指定’multinomial’,表示直接使用多分類邏輯回歸模型(Softmax分類)
-
verbose:bool類型參數(shù),是否輸出模型迭代過程的信息,默認(rèn)為0,表示不輸出
-
warm_start:bool類型參數(shù),是否基于上一次的訓(xùn)練結(jié)果繼續(xù)訓(xùn)練模型,默認(rèn)為False,表示每次迭代都是從頭開始
-
n_jobs:指定模型運算時使用的CPU數(shù)量,默認(rèn)為1,如果為-1,表示使用所有可用的CPU
4、邏輯回歸實戰(zhàn)案例
4.1案例背景
在進(jìn)行每一筆股票交易的時候,交易者(股民)都是要付給開戶所在的證券公司一些手續(xù)費的,雖然單筆交易的手續(xù)費并不高,然而股票市場每日都有巨額的成交量,使得每一筆交易的手續(xù)費匯總起來的數(shù)目相當(dāng)可觀,而這一部分收入對于一些證券公司來說很重要,甚至可以占到所有營業(yè)收入50%以上,因此證券公司對于客戶(也即交易者)的忠誠度和活躍度是很看重的。
如果一個客戶不再通過該證券公司交易,也即該客戶流失了,那么對于證券公司來說便損失了一個收入來源,因此證券公司會搭建一套客戶流失預(yù)警模型來預(yù)測交易者是否會流失,從而對于流失概率較大的客戶進(jìn)行相應(yīng)的挽回措施,因為通常情況下,獲得新客戶的成本比保留現(xiàn)有客戶的成本要高的多。
4.2數(shù)據(jù)讀取和數(shù)據(jù)集劃分
讀取數(shù)據(jù)并展示前五行數(shù)據(jù)
import pandas as pd
df = pd.read_excel('股票客戶流失.xlsx')
df.head()
劃分特征變量和目標(biāo)變量
X = df.drop(columns='是否流失')
y = df['是否流失']
劃分訓(xùn)練集和測試集
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) # 設(shè)置random_state使得每次劃分的數(shù)據(jù)一樣
X_train.head() # 顯示訓(xùn)練集X_train的前5行
4.3模型建立與預(yù)測評價
模型搭建
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
預(yù)測數(shù)據(jù)結(jié)果
y_pred = model.predict(X_test)
print(y_pred[0:100]) # 打印預(yù)測內(nèi)容的前100個看看
放到一個DataFrame里進(jìn)行查看比對
a = pd.DataFrame() # 創(chuàng)建一個空DataFrame
a['預(yù)測值'] = list(y_pred)
a['實際值'] = list(y_test)
a.head() # 可以看到此時前5個預(yù)測準(zhǔn)確度為80%
看全部的預(yù)測準(zhǔn)確度
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
預(yù)測概率
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() # 創(chuàng)建一個空DataFrame
a['閾值'] = list(thres)
a['假警報率'] = list(fpr)
a['命中率'] = list(tpr)
a.head()
繪制ROC曲線
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 設(shè)置中文
plt.plot(fpr, tpr) # 通過plot()函數(shù)繪制折線圖
plt.title('ROC曲線') # 添加標(biāo)題,注意如果要寫中文,需要在之前添加一行代碼:plt.rcParams['font.sans-serif'] = ['SimHei']
plt.xlabel('FPR') # 添加X軸標(biāo)簽
plt.ylabel('TPR') # 添加Y軸標(biāo)
plt.show()
求出模型的AUC值
from sklearn.metrics import roc_auc_score
score = roc_auc_score(y_test, y_pred_proba[:,1])
score
文章來源:http://www.zghlxwxcb.cn/news/detail-425799.html
??文章下方有交流學(xué)習(xí)區(qū)!一起學(xué)習(xí)進(jìn)步!??????
??首發(fā)CSDN博客,創(chuàng)作不易,如果覺得文章不錯,可以點贊??收藏??評論??
??你的支持和鼓勵是我創(chuàng)作的動力???文章來源地址http://www.zghlxwxcb.cn/news/detail-425799.html
到了這里,關(guān)于機器學(xué)習(xí):基于邏輯回歸(Logistic Regression)對股票客戶流失預(yù)測分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!