
讓Python猜猜你是否能約會成功
我是一個婚戀網(wǎng)站的數(shù)據(jù)分析師,新入職的第二天,接到老板的任務(wù),讓我預(yù)測來婚戀網(wǎng)站新注冊的男生&女生是否會約會成功。
如何預(yù)測一個新來的男生是否會約會成功呢?這很簡單,只需要調(diào)出一下數(shù)據(jù)庫中之前注冊網(wǎng)站的會員信息及跟蹤情況,看看和這個新來的男生條件最接近的男生是否約會成功了,那么就可以大致預(yù)估新來的男生是否會約會成功。中國有句老話叫做“近朱者赤,近墨者黑”,正是這個道理。比如下圖,假設(shè)我們將男生的條件劃分為三個維度,顏值、背景和收入。藍(lán)色點代表約會成功,灰色點代表未約會成功。紅色點代表新來的男生,他和兩個藍(lán)色點,一個灰色點最接近,因此點約會成功的可能性是2/3。
KNN算法簡介
上述思路所用到的數(shù)據(jù)挖掘算法為KNN算法, KNN(K Nearest Nighbor),K最鄰域法屬于惰性算法,其特點是不事先建立全局的判別公式和規(guī)則。當(dāng)新數(shù)據(jù)需要分類的時候,根據(jù)每個樣本和原有樣本的距離,取最近K個樣本點的眾數(shù)(Y為分類變量)或者均值(Y為連續(xù)變量)作為新樣本的預(yù)測值。實做KNN只需要考慮以下三件事情:
1. 數(shù)據(jù)的前處理
數(shù)據(jù)的屬性有Scale的問題,比如收入和年齡的量綱單位不同,則不能簡單的加總來計算距離,需要進(jìn)行極值的正規(guī)化,將輸入變量維度的數(shù)據(jù)都轉(zhuǎn)換到【0,1】之間,這樣才能進(jìn)行距離的計算。計算公式如下:
2. 距離的計算
一般使用歐幾里得距離,勾股定理大家都學(xué)過,計算兩點之間的距離,不多說。
3. 預(yù)測結(jié)果的推估
預(yù)測過程中我們會同時輸出預(yù)測的概率值,同時我們需要去了解幾個指標(biāo)的含義。
回應(yīng)率(precision):
捕捉率(recall):
F指標(biāo)(f1-score):F指標(biāo) 同時考慮Precision & Recall
使用Python進(jìn)行實做
此部分的思路如下:
1. 讀入數(shù)據(jù)集
2. 描述性分析與探索性分析
3. KNN模型建立
4. 模型的效果評估
數(shù)據(jù)集描述:此數(shù)據(jù)集為取自某婚戀網(wǎng)站往期用戶信息庫,含100個觀測,8個變量。
# 加載所需包
%matplotlib inline
import os
import numpy as np
from scipy import stats
import pandas as pd
import sklearn.model_selection as cross_validation
import matplotlib.pyplot as plt
import seaborn as sns
import math
from scipy import stats,integrate
import statsmodels.api as sm
# 加載數(shù)據(jù)并查看前5行
orgData = pd.read_csv('date_data2.csv')
orgData.head()
我從數(shù)據(jù)庫中挑選了收入、魅力值、資產(chǎn)、教育等級變量,并對收入、魅力值和資產(chǎn)進(jìn)行了分類排序。
# 查看數(shù)據(jù)集的信息
orgData.info()
從上述信息可以看出數(shù)據(jù)集總共有100個觀測,8個變量。其中浮點型2個,整型6個。還可以看出這個數(shù)據(jù)集占用了我電腦7k的內(nèi)存。
# 對數(shù)值型變量做描述性統(tǒng)計分析
orgData.describe()
Python的語法就是這么簡潔到令人發(fā)指。從上述信息我們可以觀察到各變量的計數(shù)、最大值、最小值、平均值等信息。以income為例,平均值為9010元,中位數(shù)為7500元。我們猜想是收入被平均了,如何更直觀的看到呢?很簡單,我們畫個直方圖。
# 數(shù)據(jù)可視化探索
# 查看收入分布情況 直方圖
sns.distplot(orgData['income'],fit=stats.norm);
果然,我們的收入被平均了。其他的數(shù)值型變量也可以照同樣方法畫畫看。同時,我們想看看類別型的字段和目標(biāo)變量的關(guān)系。
# 查看教育等級和是否約會成功 條形圖
sns.barplot(x='educlass',y='Dated',data=orgData);
果然,教育等級越高的人約會成功的概率越高。這么多分類變量,我如何在一張圖中呈現(xiàn)呢?很簡單,設(shè)定面板數(shù),這里我們分類的計數(shù)圖。
# 查看各分類變量和目標(biāo)變量關(guān)系
fig, (axis1,axis2,axis3,axis4) = plt.subplots(1,4,figsize=(15,5))
sns.countplot(x='Dated', hue="educlass", data=orgData, order=[1,0], ax=axis1)
sns.countplot(x='Dated', hue="income_rank", data=orgData, order=[1,0], ax=axis2)
sns.countplot(x='Dated', hue="attractive_rank", data=orgData, order=[1,0], ax=axis3)
sns.countplot(x='Dated', hue="assets_rank", data=orgData, order=[1,0], ax=axis4)
可以看出,教育等級,收入,魅力值,資產(chǎn)都和是否約會成功有密切關(guān)系。
說了這么多,下面我們開始用KNN建模,讓機(jī)器告訴我們結(jié)果吧。
# 選取自變量和因變量
X = orgData.ix[:, :4]
Y = orgData[['Dated']]
X.head()
# 進(jìn)行極值的標(biāo)準(zhǔn)化
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
X_scaled = min_max_scaler.fit_transform(X)
X_scaled[1:5]
此部分返回了自變量進(jìn)行標(biāo)準(zhǔn)化之后的2~5行值。
#劃分訓(xùn)練集和測試集
train_data, test_data, train_target, test_target = cross_validation.train_test_split(
X_scaled, Y, test_size=0.2, train_size=0.8, random_state=123)
劃分訓(xùn)練集和測試集,訓(xùn)練集用來訓(xùn)練模型,測試集用來測試模型,訓(xùn)練集樣本和測試集樣本量比例為8:2.同時設(shè)定隨機(jī)種子數(shù)。
# 建模
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3) # 默認(rèn)歐氏距離
model.fit(train_data, train_target.values.flatten())
test_est = model.predict(test_data)
我們首先從導(dǎo)入了KNN分類器,k值設(shè)置為3,然后用模型去訓(xùn)練訓(xùn)練集,并且用測試數(shù)據(jù)集來測試模型結(jié)果,輸出到test_est對象中。
# 模型評估
import sklearn.metrics as metrics
print(metrics.confusion_matrix(test_target, test_est, labels=[0, 1])) # 混淆矩陣
print(metrics.classification_report(test_target, test_est))
可以看出,模型的命中率和回應(yīng)率均值都達(dá)到了90%。F指標(biāo)為0.9
好了,模型的結(jié)果還勉強(qiáng)滿意,美滋滋,做個報告去和老板交差了。
【后話】當(dāng)然,這里面只是用了一個簡單的數(shù)據(jù)集去實操了一下KNN的做法,操作和語法都比較簡單易用理解,同時遍歷了一下我們數(shù)據(jù)挖掘的流程,相應(yīng)的知識及后續(xù)的知識沒有做過多的展開,比如前端的數(shù)據(jù)如何清洗,KNN中K值如何設(shè)定和交叉驗證,使用樸素貝葉斯預(yù)測模型的準(zhǔn)確率,特征選擇,模型融合等。希望大家能有所收獲。
~ From CDA學(xué)員
CDA LEVEL II-Python數(shù)據(jù)挖掘課程,10.14開課,本課程以案例為主線,結(jié)合開源Python工具,全面金融、電信、銀行等行業(yè)的主要數(shù)據(jù)挖掘主題。而且注重業(yè)務(wù)與算法的深入結(jié)合,在輕松的氛圍內(nèi)體會算法的奇妙之處。
【課程信息】
北京&遠(yuǎn)程直播:10月14~10月29
授課安排:現(xiàn)場班5900元,遠(yuǎn)程班4400元
(1) 授課方式:面授直播兩種形式,中文多媒體互動式授課方式
(2) 授課時間:上午9:00-12:00,下午13:30-16:30,16:30-17:00(答疑)
(3) 學(xué)習(xí)期限:現(xiàn)場與視頻結(jié)合,長期學(xué)習(xí)加練習(xí)答疑。
【課程階段】
第一階段:[10.14] 數(shù)據(jù)挖掘與Python入門
第二階段:[10.15] 數(shù)據(jù)挖掘模型與組合算法
第三階段:[10.21] KNN與線性回歸
第四階段:[10.22] 邏輯回歸與SVM
第五階段:[10.28] 文本分析與社會網(wǎng)絡(luò)分析
第六階段:[10.29] 綜合案例分析
第七階段:[線上選修] 數(shù)據(jù)分析統(tǒng)計基礎(chǔ)理論(一周)
第八階段:[線上選修] Mysql數(shù)據(jù)庫基礎(chǔ)知識(一周)
第九階段:[線上選修] Python數(shù)據(jù)可視化(一周)
【課程講師】
王小川
CDA數(shù)據(jù)分析師講師/同濟(jì)大學(xué)管理學(xué)博士
現(xiàn)就職于國內(nèi)某大型券商研究所,從事量化投資相關(guān)工作,并承擔(dān)了部分高校統(tǒng)計課程教學(xué)任務(wù)。長期研究機(jī)器學(xué)習(xí)在統(tǒng)計學(xué)中的應(yīng)用,精通MATLAB、Python、SAS等統(tǒng)計軟件,熱衷數(shù)據(jù)分析和數(shù)據(jù)挖掘工作,有著扎實的理論基礎(chǔ)和豐富的實戰(zhàn)經(jīng)驗。著有《MATLAB神經(jīng)網(wǎng)絡(luò)30個案例分析》一書。
趙仁乾
CDA數(shù)據(jù)分析研究院講師/京郵電大學(xué)管理科學(xué)與工程碩士
現(xiàn)就職于北京電信規(guī)劃設(shè)計院,從事移動、聯(lián)通集團(tuán)及各省分公司市場、業(yè)務(wù)、財務(wù)規(guī)劃、經(jīng)濟(jì)評價及運營咨詢。重點研究方向包括離網(wǎng)用戶挖掘、市場細(xì)分與精準(zhǔn)營銷、移動網(wǎng)絡(luò)價值區(qū)域分析、潛在價值客戶挖掘等。
聯(lián)系方式:
王老師
Tel:18511302788
QQ:2881989710
Mail:wzd@cda.cn
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10