国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

通透!如何從頭構(gòu)建一個(gè)機(jī)器學(xué)習(xí)模型

人工智能 機(jī)器學(xué)習(xí)
在這種情況下,企業(yè)需要避免公司進(jìn)一步流失,并希望對(duì)流失概率高的客戶采取行動(dòng)。有了上述業(yè)務(wù)需求,所以需要開發(fā)一個(gè)客戶流失預(yù)測(cè)模型。

大家好,我是小寒。

今天我將帶領(lǐng)大家一步步的來(lái)構(gòu)建一個(gè)機(jī)器學(xué)習(xí)模型。

我們將按照以下步驟開發(fā)客戶流失預(yù)測(cè)分類模型。

  1. 業(yè)務(wù)理解
  2. 數(shù)據(jù)收集和準(zhǔn)備
  3. 建立機(jī)器學(xué)習(xí)模型
  4. 模型優(yōu)化
  5. 模型部署

1.業(yè)務(wù)理解

在開發(fā)任何機(jī)器學(xué)習(xí)模型之前,我們必須了解為什么要開發(fā)該模型。

這里,我們以客戶流失預(yù)測(cè)為例。

在這種情況下,企業(yè)需要避免公司進(jìn)一步流失,并希望對(duì)流失概率高的客戶采取行動(dòng)。有了上述業(yè)務(wù)需求,所以需要開發(fā)一個(gè)客戶流失預(yù)測(cè)模型。

2.數(shù)據(jù)收集和準(zhǔn)備

數(shù)據(jù)采集

數(shù)據(jù)是任何機(jī)器學(xué)習(xí)項(xiàng)目的核心。沒有數(shù)據(jù),我們就無(wú)法訓(xùn)練機(jī)器學(xué)習(xí)模型。

在現(xiàn)實(shí)情況下,干凈的數(shù)據(jù)并不容易獲得。通常,我們需要通過(guò)應(yīng)用程序、調(diào)查和許多其他來(lái)源收集數(shù)據(jù),然后將其存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中。

在我們的案例中,我們將使用來(lái)自 Kaggle 的電信客戶流失數(shù)據(jù)。它是有關(guān)電信行業(yè)客戶歷史的開源分類數(shù)據(jù),帶有流失標(biāo)簽。

https://www.kaggle.com/datasets/blastchar/telco-customer-churn

探索性數(shù)據(jù)分析 (EDA) 和數(shù)據(jù)清理

首先,我們加載數(shù)據(jù)集。

import pandas as pd

df = pd.read_csv('WA_Fn-UseC_-Telco-Customer-Churn.csv')
df.head()

接下來(lái),我們將探索數(shù)據(jù)以了解我們的數(shù)據(jù)集。

以下是我們將為 EDA 流程執(zhí)行的一些操作。

  1. 檢查特征和匯總統(tǒng)計(jì)數(shù)據(jù)。
  2. 檢查特征中是否存在缺失值。
  3. 分析標(biāo)簽的分布(流失)。
  4. 為數(shù)值特征繪制直方圖,為分類特征繪制條形圖。
  5. 為數(shù)值特征繪制相關(guān)熱圖。
  6. 使用箱線圖識(shí)別分布和潛在異常值。

首先,我們將檢查特征和匯總統(tǒng)計(jì)數(shù)據(jù)。

df.info()

圖片圖片

df.describe()

df.describe(exclude = 'number')

圖片圖片

讓我們檢查一下缺失的數(shù)據(jù)。

df.isnull().sum()

可以看到,數(shù)據(jù)集不包含缺失數(shù)據(jù),因此我們不需要執(zhí)行任何缺失數(shù)據(jù)處理活動(dòng)。

然后,我們將檢查目標(biāo)變量以查看是否存在不平衡情況。

df['Churn'].value_counts()

圖片圖片

存在輕微的不平衡,因?yàn)榕c無(wú)客戶流失的情況相比,只有接近 25% 的客戶流失發(fā)生。

讓我們?cè)倏纯雌渌卣鞯姆植记闆r,從數(shù)字特征開始。

import numpy as np
df['TotalCharges'] = df['TotalCharges'].replace('', np.nan)
df['TotalCharges'] = pd.to_numeric(df['TotalCharges'], errors='coerce').fillna(0)

df['SeniorCitizen'] = df['SeniorCitizen'].astype('str')

df['ChurnTarget'] = df['Churn'].apply(lambda x: 1 if x=='Yes' else 0)

num_features = df.select_dtypes('number').columns
df[num_features].hist(bins=15, figsize=(15, 6), layout=(2, 5))

圖片圖片

我們還將提供除 customerID 之外的分類特征繪圖。

import matplotlib.pyplot as plt
# Plot distribution of categorical features
cat_features = df.drop('customerID', axis =1).select_dtypes(include='object').columns

plt.figure(figsize=(20, 20))
for i, col in enumerate(cat_features, 1):
    plt.subplot(5, 4, i)
    df[col].value_counts().plot(kind='bar')
    plt.title(col)

圖片圖片

然后我們將通過(guò)以下代碼看到數(shù)值特征之間的相關(guān)性。

import seaborn as sns

# Plot correlations between numerical features
plt.figure(figsize=(10, 8))
sns.heatmap(df[num_features].corr())
plt.title('Correlation Heatmap')

圖片圖片

最后,我們將使用基于四分位距(IQR)的箱線圖檢查數(shù)值異常值。

# Plot box plots to identify outliers
plt.figure(figsize=(20, 15))
for i, col in enumerate(num_features, 1):
    plt.subplot(4, 4, i)
    sns.boxplot(y=df[col])
    plt.title(col)

圖片圖片

從上面的分析中,我們可以看出,我們不應(yīng)該解決缺失數(shù)據(jù)或異常值的問題。

下一步是對(duì)我們的機(jī)器學(xué)習(xí)模型進(jìn)行特征選擇,因?yàn)槲覀冎幌胍切┯绊戭A(yù)測(cè)且在業(yè)務(wù)中可行的特征。

特征選擇

特征選擇的方法有很多種,通常結(jié)合業(yè)務(wù)知識(shí)和技術(shù)應(yīng)用來(lái)完成。

但是,本教程將僅使用我們之前做過(guò)的相關(guān)性分析來(lái)進(jìn)行特征選擇。

首先,讓我們根據(jù)相關(guān)性分析選擇數(shù)值特征。

target = 'ChurnTarget'
num_features = df.select_dtypes(include=[np.number]).columns.drop(target)

# Calculate correlations
correlations = df[num_features].corrwith(df[target])

# Set a threshold for feature selection
threshold = 0.3
selected_num_features = correlations[abs(correlations) > threshold].index.tolist()
selected_cat_features=cat_features[:-1]

selected_features = []
selected_features.extend(selected_num_features)
selected_features.extend(selected_cat_features)
selected_features

你可以稍后嘗試調(diào)整閾值,看看特征選擇是否會(huì)影響模型的性能。

3.建立機(jī)器學(xué)習(xí)模型

選擇正確的模型

選擇合適的機(jī)器學(xué)習(xí)模型需要考慮很多因素,但始終取決于業(yè)務(wù)需求。

以下幾點(diǎn)需要記住:

  1. 用例問題。它是監(jiān)督式的還是無(wú)監(jiān)督式的?是分類式的還是回歸式的?用例問題將決定可以使用哪種模型。
  2. 數(shù)據(jù)特征。它是表格數(shù)據(jù)、文本還是圖像?數(shù)據(jù)集大小是大還是小?根據(jù)數(shù)據(jù)集的不同,我們選擇的模型可能會(huì)有所不同。
  3. 模型的解釋難度如何?平衡可解釋性和性能對(duì)于業(yè)務(wù)至關(guān)重要。

經(jīng)驗(yàn)法則是,在開始復(fù)雜模型之前,最好先以較簡(jiǎn)單的模型作為基準(zhǔn)。

對(duì)于本教程,我們從邏輯回歸開始進(jìn)行模型開發(fā)。

分割數(shù)據(jù)

下一步是將數(shù)據(jù)拆分為訓(xùn)練、測(cè)試和驗(yàn)證集。

from sklearn.model_selection import train_test_split

target = 'ChurnTarget' 

X = df[selected_features]
y = df[target]

cat_features = X.select_dtypes(include=['object']).columns.tolist()
num_features = X.select_dtypes(include=['number']).columns.tolist()

#Splitting data into Train, Validation, and Test Set
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val, test_size=0.25, random_state=42, stratify=y_train_val)

在上面的代碼中,我們將數(shù)據(jù)分成 60% 的訓(xùn)練數(shù)據(jù)集和 20% 的測(cè)試和驗(yàn)證集。

一旦我們有了數(shù)據(jù)集,我們就可以訓(xùn)練模型。

訓(xùn)練模型

如上所述,我們將使用訓(xùn)練數(shù)據(jù)訓(xùn)練 Logistic 回歸模型。

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn.linear_model import LogisticRegression


preprocessor = ColumnTransformer(
    transformers=[
        ('num', 'passthrough', num_features),
        ('cat', OneHotEncoder(), cat_features)
    ])

pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', LogisticRegression(max_iter=1000))
])

# Train the logistic regression model
pipeline.fit(X_train, y_train)

模型評(píng)估

以下代碼顯示了所有基本分類指標(biāo)。

from sklearn.metrics import classification_report

# Evaluate on the validation set
y_val_pred = pipeline.predict(X_val)
print("Validation Classification Report:\n", classification_report(y_val, y_val_pred))

# Evaluate on the test set
y_test_pred = pipeline.predict(X_test)
print("Test Classification Report:\n", classification_report(y_test, y_test_pred))

從驗(yàn)證和測(cè)試數(shù)據(jù)中我們可以看出,流失率(1) 的召回率并不是最好的。這就是為什么我們可以優(yōu)化模型以獲得最佳結(jié)果。

圖片圖片

4.模型優(yōu)化

優(yōu)化模型的一種方法是通過(guò)超參數(shù)優(yōu)化,它會(huì)測(cè)試這些模型超參數(shù)的所有組合,以根據(jù)指標(biāo)找到最佳組合。

每個(gè)模型都有一組超參數(shù),我們可以在訓(xùn)練之前設(shè)置它們。

from sklearn.model_selection import GridSearchCV
# Define the logistic regression model within a pipeline
pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', LogisticRegression(max_iter=1000))
])

# Define the hyperparameters for GridSearchCV
param_grid = {
    'classifier__C': [0.1, 1, 10, 100],
    'classifier__solver': ['lbfgs', 'liblinear']
}

# Perform Grid Search with cross-validation
grid_search = GridSearchCV(pipeline, param_grid, cv=5, scoring='recall')
grid_search.fit(X_train, y_train)

# Best hyperparameters
print("Best Hyperparameters:", grid_search.best_params_)

# Evaluate on the validation set
y_val_pred = grid_search.predict(X_val)
print("Validation Classification Report:\n", classification_report(y_val, y_val_pred))

# Evaluate on the test set
y_test_pred = grid_search.predict(X_test)
print("Test Classification Report:\n", classification_report(y_test, y_test_pred))

圖片圖片

5.部署模型

我們已經(jīng)構(gòu)建了機(jī)器學(xué)習(xí)模型。有了模型之后,下一步就是將其部署到生產(chǎn)中。讓我們使用一個(gè)簡(jiǎn)單的 API 來(lái)模擬它。

首先,讓我們?cè)俅伍_發(fā)我們的模型并將其保存為 joblib 對(duì)象。

import joblib

best_params = {'classifier__C': 10, 'classifier__solver': 'liblinear'}
logreg_model = LogisticRegression(C=best_params['classifier__C'], solver=best_params['classifier__solver'], max_iter=1000)

preprocessor = ColumnTransformer(
    transformers=[
        ('num', 'passthrough', num_features),
        ('cat', OneHotEncoder(), cat_features)])

pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', logreg_model)
])

pipeline.fit(X_train, y_train)

# Save the model
joblib.dump(pipeline, 'logreg_model.joblib')

一旦模型對(duì)象準(zhǔn)備就緒,我們將創(chuàng)建一個(gè)名為 app.py 的 Python 腳本,并將以下代碼放入腳本中。

from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np

# Load the logistic regression model pipeline
model = joblib.load('logreg_model.joblib')

# Define the input data for model
class CustomerData(BaseModel):
    tenure: int
    InternetService: str
    OnlineSecurity: str
    TechSupport: str
    Contract: str
    PaymentMethod: str

# Create FastAPI app
app = FastAPI()

# Define prediction endpoint
@app.post("/predict")
def predict(data: CustomerData):
    input_data = {
        'tenure': [data.tenure],
        'InternetService': [data.InternetService],
        'OnlineSecurity': [data.OnlineSecurity],
        'TechSupport': [data.TechSupport],
        'Contract': [data.Contract],
        'PaymentMethod': [data.PaymentMethod]
    }
   
    import pandas as pd
    input_df = pd.DataFrame(input_data)
   
    # Make a prediction
    prediction = model.predict(input_df)
   
    # Return the prediction
    return {"prediction": int(prediction[0])}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

在命令提示符或終端中,運(yùn)行以下代碼。

uvicorn app:app --reload

有了上面的代碼,我們已經(jīng)有一個(gè)用于接受數(shù)據(jù)和創(chuàng)建預(yù)測(cè)的 API。

讓我們?cè)谛陆K端中使用以下代碼嘗試一下。

curl -X POST "http://127.0.0.1:8000/predict" -H "Content-Type: application/json" -d "{\"tenure\": 72, \"InternetService\": \"Fiber optic\", \"OnlineSecurity\": \"Yes\", \"TechSupport\": \"Yes\", \"Contract\": \"Two year\", \"PaymentMethod\": \"Credit card (automatic)\"}"

如你所見,API 結(jié)果是一個(gè)預(yù)測(cè)值為 0(Not-Churn)的字典。你可以進(jìn)一步調(diào)整代碼以獲得所需的結(jié)果。

責(zé)任編輯:武曉燕 來(lái)源: 程序員學(xué)長(zhǎng)
相關(guān)推薦

2024-08-15 14:48:57

2020-11-19 10:04:45

人工智能

2021-11-08 17:03:13

IO模型

2024-04-12 14:04:17

機(jī)器學(xué)習(xí)DNN

2021-11-02 09:40:50

TensorFlow機(jī)器學(xué)習(xí)人工智能

2017-07-07 14:41:13

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)JavaScript

2024-05-23 16:48:42

機(jī)器學(xué)習(xí)算法人工智能

2018-12-17 09:10:52

機(jī)器學(xué)習(xí)TensorFlow容器

2017-10-13 15:59:24

iPhone機(jī)器學(xué)習(xí)iOS

2020-02-21 11:23:11

機(jī)器學(xué)習(xí)技術(shù)人生第一份工作

2024-06-24 07:50:00

代碼機(jī)器學(xué)習(xí)

2024-09-30 05:43:44

2020-09-28 12:42:17

機(jī)器學(xué)習(xí)語(yǔ)言GitHub

2022-08-09 13:44:37

機(jī)器學(xué)習(xí)PySpark M數(shù)據(jù)分析

2021-04-29 15:29:52

機(jī)器學(xué)習(xí)人工智能AI

2022-10-08 00:00:00

AdminUser數(shù)據(jù)庫(kù)鑒權(quán)

2023-02-01 08:04:07

測(cè)試flask網(wǎng)頁(yè)

2025-03-04 08:00:00

機(jī)器學(xué)習(xí)Rust開發(fā)

2021-09-02 08:02:50

深度學(xué)習(xí)Kubernetes集群管理

2020-10-14 14:18:33

機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)架構(gòu)人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

狠狠久久亚洲欧美专区| 最新精品视频在线| 热re99久久精品国产66热| 在线免费不卡视频| 久久综合五月天婷婷伊人| 在线欧美视频| 一个色免费成人影院| 少妇在线看www| 伦理片一区二区三区| 影音先锋男人的网站| 久久免费国产精品1| 日韩视频中文字幕| 欧美一区二区视频在线观看2022| 天堂资源在线中文精品| 亚洲影视一区二区三区| 日韩高清中文字幕一区二区| 色婷婷av金发美女在线播放| 日韩人妻无码精品久久久不卡| 91高清视频在线免费观看| 久久九九免费视频| 欧美日韩亚洲一区二区| 自拍视频在线观看一区二区| 成人午夜激情视频| 麻豆精品一区二区三区| 日韩av在线免费观看不卡| 男人的天堂成人在线| 中文字幕亚洲精品乱码| jlzzjlzz亚洲女人| 国产精品欧美大片| 欧洲亚洲精品久久久久| 999精品视频在线观看| 欧美高清hd| 精品女同一区二区三区在线观看| 福利片在线看| 97在线影院| 国产视频一二三区| 国产又粗又大又爽的视频| 免费看黄在线看| 欧美少妇在线观看| 亚洲 欧美 综合 另类 中字| 日本午夜精品一区二区| 激情五月婷婷六月| 日本美女高潮视频| 酒色婷婷桃色成人免费av网| 91se在线| 日韩专区视频网站| 国产精品欧美三级在线观看| 精品动漫3d一区二区三区免费| 999在线观看精品免费不卡网站| 久久国产三级精品| 26uuu精品一区二区| 91国在线观看| 日韩亚洲欧美综合| 正在播放亚洲1区| 亚洲a∨日韩av高清在线观看| 成人信息集中地欧美| 亚洲精品一品区二品区三品区| 91久久国产婷婷一区二区| 欧美激情第一页在线观看| 成人免费视频观看视频| 精品国产一区二区三区久久久久久| 亚洲精品偷拍视频| 91人人澡人人爽人人精品| 97caopor国产在线视频| 久久99视频| 国产精品996| 欧美日韩视频第一区| 国产做受高潮69| 久久国产视频网站| 91精品国产免费久久综合| 一级中文字幕一区二区| 国产91精品精华液一区二区三区 | 亚洲精品一区二三区不卡| 久久精品在线视频| 国产伦精品一区二区三区视频黑人| 青春草国产视频| 欧美私人网站| 牛牛精品成人免费视频| 国产成人午夜精品影院观看视频 | 久久爱www成人| 丰满少妇久久久久久久| 五月婷婷久久丁香| 国产亚洲综合久久| 国产精品一区二区电影| 五月婷婷综合色| 久久天堂电影| 第一会所亚洲原创| 成人一区二区三区视频| 精品日韩在线观看| 91色琪琪电影亚洲精品久久| 黑森林福利视频导航| a级网站在线播放| 欧洲精品99毛片免费高清观看| 国产精品亚洲欧美| 亚洲国产另类av| 欧美日韩国产成人在线| 在线观看日本一区| 黄色网页在线免费看| 欧美调教网站| youjizz国产精品| 精品国产伦一区二区三区免费| 成人激情视频在线播放| 日本视频一二三区中文字幕| 国产成人a视频高清在线观看| 免费在线亚洲欧美| 欧美日韩一区高清| 国产精品天天狠天天看| 国产熟人av一二三区| 在线免费成人| 国产欧美日韩麻豆91| 色爱av美腿丝袜综合粉嫩av| 一区二区三区四区五区视频| 成人免费网站观看| 国产一区二区在线影院| 亚洲欧美另类国产| 无码人妻丰满熟妇区96| 亚州欧美在线| 国产精品国产自产拍高清av| 97精品国产97久久久久久春色| 国产亚洲天堂网| 一区二区三区四区在线看| 亚洲一区二区三区三| 国产精品久久一区| bdsm精品捆绑chinese| 亚洲无线视频| 欧美日韩不卡一区| 青青在线免费视频| 91精品在线免费视频| 18成人在线视频| 亚洲综合中文字幕在线观看| 污片视频在线免费观看| 成人免费观看av| 国产精品久久久久久久久久久久 | 在线观看欧美激情| 日韩精品视频在线看| 色综合天天综合网天天狠天天 | 精品亚洲一区二区三区四区五区高| 看黄网站在线观看| 99精品视频一区| 成人国内精品久久久久一区| 黑人与亚洲人色ⅹvideos| 国产美女娇喘av呻吟久久| 日韩美女免费观看| 超碰91在线观看| 最新高清无码专区| 亚洲第一精品区| 杨幂一区二区三区免费看视频| 欧美一区二区黄色| h动漫在线视频| 成人午夜又粗又硬又大| 国产在线观看91精品一区| 欧美人体一区二区三区| 日本韩国欧美三级| 99热在线免费播放| 亚洲国产免费| 国产精品久久久久久久久久免费 | 蜜桃视频在线一区| 成人福利视频网| 久久亚洲黄色| 国产一区二区欧美日韩| av网站在线播放| 亚洲综合视频网| 九色91popny| 成人免费视频一区| 亚洲最大的免费| 99re91这里只有精品| 亚洲欧美日韩另类| 91精彩视频在线播放| 午夜私人影院久久久久| 成人禁在线观看网站| 99精品视频一区| 大胆欧美熟妇xx| 噜噜噜久久亚洲精品国产品小说| 91精品黄色| 欧美日韩免费| 操人视频欧美| 精品久久久久久久久久久aⅴ| 欧美精品电影免费在线观看| 成人黄色免费短视频| 亚洲国产高清自拍| 黄色在线播放网站| 欧美日韩性生活| 午夜在线视频播放| 欧美精品vⅰdeose4hd| 黄色精品免费看| 日韩免费电影网站| 欧美激情20| 最近更新的2019中文字幕| 超碰高清在线| 中文字幕亚洲字幕| 91精品网站在线观看| 91av在线播放| 国产精品99久久| 91免费看蜜桃| 久久亚洲电影| av不卡在线免费观看| 成人性生交大合| 国产日本视频| 欧美精品一二三| 在线手机中文字幕|