資料分析中常用的“分類算法”及其應用

數據分析那些事
13 min readSep 24, 2024

--

(以下文章來源於數據分析星球 ,作者數據分析星球)

01 分類演算法簡介

隨著網際網路時代的到來,資料的規模和複雜程度越來越高,如何從這些資料中挖掘出有價值的資訊,成為了資料分析和人工智慧領域的核心問題。

在資料分析領域,分類演算法是一種十分重要的技術手段,它可以幫助我們從資料中識別出不同的類別,比如:電商平臺使用者的購買意向、金融機構的風險評估等,具有非常廣泛的應用場景。

本文將介紹機器學習中的分類演算法,並結合一個金融風控評估的資料分析專案,詳細講解如何使用Python實現分類的資料分析專案。

1、分類演算法的基礎概念

❓什麼是分類演算法

分類演算法是一種監督學習演算法,它可以將資料集分為多個類別,從而幫助我們瞭解資料集的不同類別的分佈規律和特徵。它透過學習訓練資料集中的樣本特徵,來建立分類模型,從而對未知的資料進行分類。

❓監督學習和無監督學習的區別

· 監督學習是指已知資料集的特徵和對應的類別標籤,透過對這些資料進行學習和訓練,來建立分類模型和預測模型。

· 無監督學習則是不需要類別標籤的學習,它透過發現數據集中的相似性和規律性,來進行聚類、降維和異常檢測等任務。

2、分類演算法的評估指標

分類演算法的評估指標包括準確率、精確率、召回率和F1值等。

準確率是指分類正確的樣本數佔總樣本數的比例;

精確率是指分類正確的正樣本數佔分類為正樣本的樣本數的比例;

召回率是指分類正確的正樣本數佔正樣本總數的比例;

F1值則是綜合了精確率和召回率的指標。

分類演算法在資料分析中的應用場景及重要性:分類演算法在資料分析中有著廣泛的應用場景,比如:電商平臺使用者的購買意向預測和產品推薦、金融機構的風險評估和信用評級、醫療診斷和預測、市場營銷策略最佳化等。它可以幫助我們識別出不同的類別,為資料分析和業務決策提供可靠的資訊和依據。

02 常見分類演算法介紹

K近鄰演算法

K近鄰演算法是一種基於例項的分類演算法,它的基本思想是:如果一個樣本在特徵空間中的K個最相似(即特徵空間中最近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

K近鄰演算法的適用場景包括:多分類問題、非線性分類問題和資料較為複雜的分類問題。

邏輯迴歸

邏輯迴歸是一種基於機率的分類演算法,它透過擬合數據的機率分佈,來預測樣本的類別。

邏輯迴歸的適用場景包括:二分類問題和多分類問題。

樸素貝葉斯演算法

樸素貝葉斯演算法是一種基於貝葉斯定理的分類演算法,它假設每個特徵與其他特徵之間相互獨立,從而大大簡化了模型的計算複雜度。

樸素貝葉斯演算法的適用場景包括:文字分類、垃圾郵件過濾、情感分析等。

支援向量機

支援向量機是一種基於核函式的分類演算法,它透過將資料對映到高維特徵空間中,將非線性可分問題轉化為線性可分問題,並透過找到最優超平面,將資料進行分類。

支援向量機的適用場景包括:二分類問題和多分類問題。

決策樹演算法

決策樹演算法是一種基於樹結構的分類演算法,它透過對特徵的選擇和分裂,將資料集劃分為不同的子集,最終構建一棵決策樹,用於對未知資料進行分類。

決策樹演算法的適用場景包括:多分類問題和非線性分類問題。

隨機森林

隨機森林是一種基於決策樹的整合學習演算法,它透過隨機選擇特徵和樣本,構建多棵決策樹,並將它們組合起來,用於對未知資料進行分類。

隨機森林的適用場景包括:二分類問題和多分類問題。

xgboost

xgboost是一種基於決策樹的梯度提升演算法,它透過最佳化目標函式和使用正則化方法,來提高分類模型的準確性和泛化能力。

xgboost的適用場景包括:二分類問題和多分類問題。

03 分類演算法的主要步驟

1、選題背景和目的

在選題背景和目的部分,我們需要介紹一個具體的資料分析應用場景,比如:金融風控評估。我們需要描述該應用場景的背景和目的,以及如何使用分類演算法來解決問題。

2、資料預處理

在資料預處理部分,我們需要對資料進行清洗、去重、缺失值處理、異常值處理等基本操作,以確保資料的準確性和完整性。

3、特徵工程

在特徵工程部分,我們需要對資料進行特徵提取、特徵選擇和特徵轉換等操作,以獲得更加有用的特徵資訊。我們可以採用PCA、LDA等方法進行降維,或者使用特徵選擇演算法來選取最重要的特徵。

4、分類演算法的選擇和調優

在分類演算法的選擇和調優部分,我們需要根據具體的應用場景和資料特點,選擇合適的分類演算法,並使用交叉驗證等方法來最佳化模型引數,提高分類模型的準確性和泛化能力。

5、結果評估和視覺化

在結果評估和視覺化部分,我們需要使用評估指標來評估分類模型的準確性和效能,同時使用視覺化工具來展示分類結果,使得結果更加直觀和易於理解。

04 分類演算法案例實操

1、專案背景及需求

金融機構在進行貸款業務時,需要對客戶進行信用評估和風險評估,以降低風險和提高效率。本專案基於金融機構的貸款業務資料,透過對客戶的信用評估、貸款記錄等資料進行特徵工程和分類演算法的選擇和調優,實現風險評估和信用評級的分類模型。

2、主要步驟

①資料獲取和預處理

在本專案中,我們使用的資料集為UCI的German Credit資料集,包括20個屬性,1000個樣本,其中700個訓練樣本和300個測試樣本。在資料預處理部分,我們需要對資料進行清洗、去重、缺失值處理、異常值處理等基本操作,以確保資料的準確性和完整性。具體程式碼如下:

import pandas as pd
import numpy as np

# 讀取資料集
df = pd.read_csv("german_credit.csv")

# 資料預處理# 缺失值處理,使用衆數填充
df = df.fillna(df.mode().iloc[0])

# 資料轉換,將非數值型特徵轉化為數值型特徵
df['creditability'] = df['creditability'].apply(lambda x: 1 if x == 1 else 0)
df['sex'] = df['sex'].apply(lambda x: 1 if x == 'male' else 0)
df = pd.get_dummies(df, columns=['job', 'housing', 'saving_accounts', 'checking_account', 'purpose'])

# 資料劃分,劃分訓練集和測試集from sklearn.model_selection import train_test_split

X = df.drop('creditability', axis=1)
y = df['creditability']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

②特徵工程

在特徵工程部分,我們需要對資料進行特徵提取、特徵選擇和特徵轉換等操作,以獲得更加有用的特徵資訊。我們可以採用PCA、LDA等方法進行降維,或者使用特徵選擇演算法來選取最重要的特徵。具體程式碼如下:

from sklearn.feature_selection import SelectKBest, f_classif

# 特徵選擇
selector = SelectKBest(f_classif, k=15)
X_train = selector.fit_transform(X_train, y_train)
X_test = selector.transform(X_test)

③分類演算法的選擇和調優

在分類演算法的選擇和調優部分,我們需要根據具體的應用場景和資料特點,選擇合適的分類演算法,並使用交叉驗證等方法來最佳化模型引數,提高分類模型的準確性和泛化能力。本專案中,我們選擇了決策樹演算法作為主要分類演算法,並使用GridSearchCV來進行超引數調優。具體程式碼如下:


from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

# 分類演算法的選擇和調優# 決策樹演算法
dtc = DecisionTreeClassifier(random_state=42)
params = {'max_depth': range(1, 11), 'min_samples_split': range(2, 21, 2)}
grid_search = GridSearchCV(dtc, param_grid=params, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
best_params = grid_search.best_params_

# 使用最佳引數進行模型訓練
dtc_best = DecisionTreeClassifier(**best_params)
dtc_best.fit(X_train, y_train)

④結果評估和視覺化

在結果評估和視覺化部分,我們需要對模型的預測結果進行評估,並可視化模型的分類效果。可以使用混淆矩陣、ROC曲線、PR曲線等方法來評估模型的分類效果。具體程式碼如下:

from sklearn.metrics import confusion_matrix, roc_curve, precision_recall_curve, auc
import matplotlib.pyplot as plt

# 結果評估和視覺化# 預測測試集的分類結果
y_pred = dtc_best.predict(X_test)

# 計算混淆矩陣
tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
print("TN: {}, FP: {}, FN: {}, TP: {}".format(tn, fp, fn, tp))

# 繪製ROC曲線
fpr, tpr, thresholds = roc_curve(y_test, dtc_best.predict_proba(X_test)[:, 1])
roc_auc = auc(fpr, tpr)
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()

# 繪製PR曲線
precision, recall, thresholds = precision_recall_curve(y_test, dtc_best.predict_proba(X_test)[:, 1])
pr_auc = auc(recall, precision)
plt.figure(figsize=(8, 6))
plt.plot(recall, precision, label='PR curve (area = %0.2f)' % pr_auc)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall curve')
plt.legend(loc="lower right")
plt.show()

# 輸出分類報告
print(classification_report(y_test, y_pred))

# 輸出特徵重要性
importances = dtc_best.feature_importances_
indices = np.argsort(importances)[::-1]
print("Feature ranking:")
for f in range(X_train.shape[1]):
print("%d. %s (%f)" % (f + 1, X.columns[indices[f]], importances[indices[f]]))

# 視覺化決策樹
dot_data = StringIO()
export_graphviz(dtc_best, out_file=dot_data, feature_names=X.columns, class_names=["good", "bad"], filled=True, rounded=True, special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

05 總結

分類演算法在資料分析領域中是非常重要的一部分。在實際應用中,不同的分類演算法各自具有優勢和侷限性。

K近鄰演算法適用於非常小的資料集,對於較大的資料集,運算時間會變得非常慢。邏輯迴歸演算法適用於需要預測機率的情況,但是對於非線性資料集,效果並不理想。

樸素貝葉斯演算法快速而準確,但是需要假設所有特徵都是相互獨立的。支援向量機演算法對於小樣本的資料集表現良好,但是對於非線性資料集的分類效果不好。

決策樹演算法簡單易懂,易於解釋和實現,但是容易過擬合。隨機森林和XGBoost演算法是整合學習演算法,可以有效地避免過擬合的問題,並且在許多比賽中都有不錯的表現。但是,它們可能會出現過擬合問題。

在選擇分類演算法時,資料分析人員需要根據資料集的特點和分析目的,權衡演算法的優缺點。同時,還需要注意對資料進行適當的預處理和特徵工程,以提高分類演算法的效能。

在使用演算法時,需要注意引數的選擇和調優,以避免過擬合或欠擬合等問題。此外,資料分析人員還應該根據模型的評估指標和實際業務需求,合理地評估模型的效能,並進行視覺化展示,以便業務部門更好地理解和接受分類結果。

以上就是本期的內容分享~~,碼字不易,如果覺得對你有一點點幫助,歡迎「追蹤」,「按贊」,「分享」喔,我會持續為大家創作優質的內容~~

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦:

數據分析之落地 sop 流程

那些年,背過的SQL題

MySQL常用指令碼

商業分析應該怎麼做?一篇文章把思維和工具說清楚了!

乾貨 | 如何搭建用戶分析體系

回顧十週入門數據分析系列文:

關注數據君的臉書,ins(全網同名)

我是「數據分析那些事」。常年在臉書ins分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,並在臉書置頂帖子下回復SQL50,會有MySQL經典50題及答案贈送唷!

--

--

數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/