
隨著大數據的時代的來臨,各個行業都受到了數據分析不同程度的影響和作用。尤其是在電信行業,數據分析已經逐漸成為電信運營商的戰略優勢之一。
大家好,我是一名CDA持證人,今天想跟大家分享一下,我如何從文科生轉行成為了一名電信行業的數據挖掘工程師。
主要內容分成以下三塊:
首先看到第一部分的內容,也就是我的轉行歷程。
我高中那會兒讀的是文科,大學期間學習了社會學專業。在本科期間,我也接觸過一些統計學的知識,線性代數等知識也學過,但當時對這些學科將來的用途并不是很清楚。
參加工作后,最初我從事產品運營的相關工作。在工作過程中,我接觸到了數據分析相關的內容。當時我感覺自己工作內容比較雜,也沒有拿得出來的技能。
我認為數據分析很有前景,無論是文科生還是理科生都可以學,學起來也比較有趣,內容不枯燥,所以我漸漸開始學習數據分析。
這里我列了幾個對我比較關鍵的節點,這些對我未來的工作有了較大的影響。
首先就是學數據挖掘,用的是SPSS Modeler。比較容易上手,入門也比較簡單。SPSS Modeler雖然很好用,但其實很多時候不能滿足數據清洗的一些需求,也有一些劣勢,比如算法更新很慢,只有比較常規的算法,如果想用比較先進的算法,還是開源的軟件提供的比較多。
之后我學習了Python,比較容易上手,語法也比較簡潔。通過大量練習掌握了爬蟲、數據清洗、數據可視化等技能點。Python基本能滿足日常工作的需求。
第三個節點是我學習了SQL和統計知識。SQL本身基礎的知識不是特別復雜,然后主要靠練習,包括統計的一些知識,這也是我在之后的工作中不斷學習的。
目前我目前從事的是數據挖掘的相關工作,接下來講一下工作中所需要的一些技能。
這部分可以分為硬技能和軟技能。
硬技能
硬技能這里我分為理論基礎、算法能力、分析工具和通用工具。下面具體來看一看。理論基礎中統計知識是不可或缺的。后面的概率論、線性代數、微積分其實是跟偏算法相關。
算法方面主要需要一些機器學習跟深度學習的算法。比如分類、回歸、聚類等一些比較基礎的算法。
不同于算法工程師對算法的要求會比較高,像偏業務的數據挖掘的崗位,對算法的要求沒那么高。你能夠做到理解算法的基本原理跟應用場景,能夠應用工具去實現它,能夠解讀算法最后的結果,也就差不多了,對數學的要求也并不太高。
關于深度學習,現在數據挖掘等算法崗也相對內卷,如果你不會也不了解深度學習就有點說不過去了,這方面可以了解一下。還需要掌握一些工具庫,現在深度學習的工具庫比較多,也有一些比較簡便的工具庫能協助實現相關的功能。
然后看到分析工具。其實目前主要用的也就是SQL跟Python,主要是看你公司的數據量,如果數據量不是很大的話,基礎的一些SQL知識就夠了,可能關系數據庫就可以了,包括在單機里面,去運行Python也可以的;但是如果公司的數據量特別大的話,比如我目前是在Hadoop的平臺做一些數據分析跟數據挖掘。如果本身的數據量就比較大,可能會用到Hive數據倉庫等。
再看到建模工具,目前其實主流是Python,還有集成了Pyspark,這是用得比較多的。然后建模的話,考慮到數據量Python在80%的情況上都是夠用的。
關于通用工具,Excel跟PPT都是比較基礎的。下面這個Shell是開發工具,很多時候會涉及到一些開發的工作,比如說標簽表的開發,然后就會用到Shell結合ETL自動化平臺,調用需要的腳本進行自動化的運行。就相當于是每天它會自動的跑一些腳本,而不需要去手工或者是在單機操作,這些都是在平臺上面自動完成的。
軟技能
軟技能這塊簡單看一下,包括像業務的理解,比如你進入任何一個行業,你前幾個月會多花時間了解該行業的業務表,業務涉及的一些內容,核心的盈利業務是哪些。還有一些通用的能力,比如溝通、匯報能力等,因為你經常會需要將模型和分析報告講給別人聽,因此這些能力也是十分重要的。還有學習能力。數據行業的迭代比較快,需要有持續學習的能力。
用Python創建電信客戶流失模型
下面我們再來看一下數據分析在電信行業的應用,目前國內運營商運用大數據主要有五方面:
(1)網絡管理和優化,包括基礎設施建設優化和網絡運營管理和優化;
(2)市場與精準營銷,包括客戶畫像、關系鏈研究、精準營銷、實時營銷和個性化推薦;
(3)客戶關系管理,包括客服中心優化和客戶生命周期管理;
(4)企業運營管理,包括業務運營監控和經營分析;
(5)數據商業化指數據對外商業化。
接下來,今天給大家演示一下,把數據分析應用到電信行業的具體案例,這里教大家用Python寫一個電信用戶流失預測模型。
流失客戶是指那些曾經使用過產品或服務,由于對產品失去興趣等種種原因,不再使用產品或服務的顧客。
電信服務公司、互聯網服務提供商、保險公司等經常使用客戶流失分析和客戶流失率作為他們的關鍵業務指標之一,因為留住一個老客戶的成本遠遠低于獲得一個新客戶。
預測分析使用客戶流失預測模型,通過評估客戶流失的風險傾向來預測客戶流失。由于這些模型生成了一個流失概率排序名單,對于潛在的高概率流失客戶,他們可以有效地實施客戶保留營銷計劃。
下面我們就教你如何用Python寫一個電信用戶流失預測模型,以下是具體步驟和關鍵代碼。
此次分析數據來自于IBM Sample Data Sets,統計自某電信公司一段時間內的消費數據。共有7043筆客戶資料,每筆客戶資料包含21個字段,其中1個客戶ID字段,19個輸入字段及1個目標字段-Churn(Yes代表流失,No代表未流失),輸入字段主要包含以下三個維度指標:用戶畫像指標、消費產品指標、消費信息指標。字段的具體說明如下:
首先導入所需包。
# 數據處理
import numpy as np
import pandas as pd
# 可視化
import matplotlib.pyplot as plt
import seaborn as sns
import plotly as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
# 前處理
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
# 建模
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.neural_network import MLPClassifier
from sklearn.svm import SVC
from lightgbm import LGBMClassifier
from xgboost import XGBClassifier
# 模型評估
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report
from sklearn.metrics import roc_auc_score, roc_curve, scorer
from sklearn.metrics import recall_score, precision_score, f1_score, cohen_kappa_score
pd.set_option('display.max_columns', None)
讀入數據集
df = pd.read_csv('./Telco-Customer-Churn.csv')
df.head()
首先進行初步的數據清洗工作,包含錯誤值和異常值處理,并劃分類別型和數值型字段類型,其中清洗部分包含:
# 錯誤值處理
repl_columns = ['OnlineSecurity', 'OnlineBackup', 'DeviceProtection',
'TechSupport','StreamingTV', 'StreamingMovies']
for i in repl_columns:
df[i] = df[i].replace({'No internet service' : 'No'})
# 替換值SeniorCitizen
df["SeniorCitizen"] = df["SeniorCitizen"].replace({1: "Yes", 0: "No"})
# 替換值TotalCharges
df['TotalCharges'] = df['TotalCharges'].replace(' ', np.nan)
# TotalCharges空值:數據量小,直接刪除
df = df.dropna(subset=['TotalCharges'])
df.reset_index(drop=True, inplace=True) # 重置索引
# 轉換數據類型
df['TotalCharges'] = df['TotalCharges'].astype('float')
# 轉換tenure
def transform_tenure(x):
if x <= 12:
return 'Tenure_1'
elif x <= 24:
return 'Tenure_2'
elif x <= 36:
return 'Tenure_3'
elif x <= 48:
return 'Tenure_4'
elif x <= 60:
return 'Tenure_5'
else:
return 'Tenure_over_5'
df['tenure_group'] = df.tenure.apply(transform_tenure)
# 數值型和類別型字段
Id_col = ['customerID']
target_col = ['Churn']
cat_cols = df.nunique()[df.nunique() < 10].index.tolist()
num_cols = [i for i in df.columns if i not in cat_cols + Id_col]
print('類別型字段:n', cat_cols)
print('-' * 30)
print('數值型字段:n', num_cols)
類別型字段:
['gender', 'SeniorCitizen', 'Partner', 'Dependents', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies', 'Contract', 'PaperlessBilling', 'PaymentMethod', 'Churn', 'tenure_group']
------------------------------
數值型字段:
['tenure', 'MonthlyCharges', 'TotalCharges']
對指標進行歸納梳理,分用戶畫像指標,消費產品指標,消費信息指標。探索影響用戶流失的關鍵因素。
1. 目標變量Churn分布
經過初步清洗之后的數據集大小為7032條記錄,其中流失客戶為1869條,占比26.6%,未流失客戶占比73.4%。
df['Churn'].value_counts()
No 5163
Yes 1869
Name: Churn, dtype: int64
trace0 = go.Pie(labels=df['Churn'].value_counts().index,
values=df['Churn'].value_counts().values,
hole=.5,
rotation=90,
marker=dict(colors=['rgb(154,203,228)', 'rgb(191,76,81)'],
line=dict(color='white', width=1.3))
)
data = [trace0]
layout = go.Layout(title='目標變量Churn分布')
fig = go.Figure(data=data, layout=layout)
py.offline.plot(fig, filename='./html/整體流失情況分布.html')
2.性別
分析可見,男性和女性在客戶流失比例上沒有顯著差異。
plot_bar(input_col='gender', target_col='Churn', title_name='性別與是否流失的關系')
3. 老年用戶
老年用戶流失比例更高,為41.68%,比非老年用戶高近兩倍,此部分原因有待進一步探討。
plot_bar(input_col='SeniorCitizen', target_col='Churn', title_name='老年用戶與是否流失的關系')
4. 是否有配偶
從婚姻情況來看,數據顯示,未婚人群中流失的比例比已婚人數高出13%。
plot_bar(input_col='Partner', target_col='Churn', title_name='是否有配偶與是否流失的關系')
5. 上網時長
經過分析,這方面可以得出兩個結論:
plot_bar(input_col='tenure_group', target_col='Churn', title_name='在網時長與是否流失的關系')
6. 付款方式
支付方式上,支付上,選擇電子支票支付方式的用戶流失最高,達到45.29%,其他三種支付方式的流失率相差不大。
pd.crosstab(df['PaymentMethod'], df['Churn'])
plot_bar(input_col='PaymentMethod', target_col='Churn', title_name='付款方式與是否流失關系')
7. 月費用
整體來看,隨著月費用的增加,流失用戶的比例呈現高高低低的變化,月消費80-100元的用戶相對較高。
plot_histogram(input_col='MonthlyCharges', title_name='月費用與是否流失關系')
8. 數值型屬性相關性
從相關性矩陣圖可以看出,用戶的往來期間和總費用呈現高度相關,往來期間越長,則總費用越高。月消費和總消費呈現顯著相關。
plt.figure(figsize=(15, 10))
sns.heatmap(df.corr(), linewidths=0.1, cmap='tab20c_r', annot=True)
plt.title('數值型屬性的相關性', fontdict={'fontsize': 'xx-large', 'fontweight':'heavy'})
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()
使用統計檢定方式進行特征篩選。
# 刪除tenure
df = df.drop('tenure', axis=1)
from feature_selection import Feature_select
# 劃分X和y
X = df.drop(['customerID', 'Churn'], axis=1)
y = df['Churn']
fs = Feature_select(num_method='anova', cate_method='kf', pos_label='Yes')
x_sel = fs.fit_transform(X, y)
2020 09:30:02 INFO attr select success!
After select attr: ['DeviceProtection', 'MultipleLines', 'OnlineSecurity', 'TechSupport', 'tenure_group', 'PaperlessBilling', 'InternetService', 'PaymentMethod', 'SeniorCitizen', 'MonthlyCharges', 'Dependents', 'Partner', 'Contract', 'StreamingTV', 'TotalCharges', 'StreamingMovies', 'OnlineBackup']
經過特征篩選,gender和PhoneService字段被去掉。
在python中,為滿足建模需要,一般需要對數據做以下處理:
# 篩選變量
select_features = x_sel.columns
# 建模數據
df_model = pd.concat([df['customerID'], df[select_features], df['Churn']], axis=1)
Id_col = ['customerID']
target_col = ['Churn']
# 分類型
cat_cols = df_model.nunique()[df_model.nunique() < 10].index.tolist()
# 二分類屬性
binary_cols = df_model.nunique()[df_model.nunique() == 2].index.tolist()
# 多分類屬性
multi_cols = [i for i in cat_cols if i not in binary_cols]
# 數值型
num_cols = [i for i in df_model.columns if i not in cat_cols + Id_col]
# 二分類-標簽編碼
le = LabelEncoder()
for i in binary_cols:
df_model[i] = le.fit_transform(df_model[i])
# 多分類-啞變量轉換
df_model = pd.get_dummies(data=df_model, columns=multi_cols)
df_model.head()
首先使用分層抽樣的方式將數據劃分訓練集和測試集。
# 重新劃分
X = df_model.drop(['customerID', 'Churn'], axis=1)
y = df_model['Churn']
# 分層抽樣
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0, stratify=y)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
#修正索引
for i in [X_train, X_test, y_train, y_test]:
i.index = range(i.shape[0])
(5625, 31) (1407, 31) (5625,) (1407,)
# 保存標準化訓練和測試數據
st = StandardScaler()
num_scaled_train = pd.DataFrame(st.fit_transform(X_train[num_cols]), columns=num_cols)
num_scaled_test = pd.DataFrame(st.transform(X_test[num_cols]), columns=num_cols)
X_train_sclaed = pd.concat([X_train.drop(num_cols, axis=1), num_scaled_train], axis=1)
X_test_sclaed = pd.concat([X_test.drop(num_cols, axis=1), num_scaled_test], axis=1)
然后建立一系列基準模型并比較效果。
假如我們關注roc指標,從模型表現效果來看,Naive Bayes效果最好。
我們也可以對模型進行進一步優化,比如對決策樹參數進行調優。
parameters = {'splitter': ('best','random'),
'criterion': ("gini","entropy"),
"max_depth": [*range(3, 20)],
}
clf = DecisionTreeClassifier(random_state=25)
GS = GridSearchCV(clf, parameters, scoring='f1', cv=10)
GS.fit(X_train, y_train)
print(GS.best_params_)
print(GS.best_score_)
{'criterion': 'entropy', 'max_depth': 5, 'splitter': 'best'}
0.585900839405024
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23