Análisis de datos de abandono de clientes de telecomunicaciones (2)

Tarea 3 ¿Cómo determinar si el cliente es un objetivo potencial de pérdida?

Los antecedentes básicos del conjunto de datos y el análisis de la relación entre las características se pueden ver en la
publicación de blog anterior: Análisis de datos de pérdida de clientes de telecomunicaciones (1)

Entrada de conjunto de datos y preprocesamiento (base de todos los programas posteriores):

import seaborn as sns
import pandas as pd
import numpy as np
Te_data = pd.read_csv("WA_Fn-UseC_-Telco-Customer-Churn.csv")
Te_data.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True)
Te_data.dropna(axis=0, how='any', inplace=True)
Te_data['TotalCharges'] = pd.to_numeric(Te_data['TotalCharges'])

Ingrese el tema a continuación. . .
En el caso de más de 7000 muestras, podemos usar estos datos de muestra para entrenar un modelo de aprendizaje automático supervisado, de modo que el modelo pueda predecir si el cliente es un posible objeto de abandono basado en las características de entrada. Para posibles objetos de abandono, tomar medidas oportunas para retenerlos puede reducir efectivamente la posibilidad de abandono futuro.
En la tarea 2 (vea la publicación del blog: Análisis de datos de abandono de clientes de telecomunicaciones (1)), a través del análisis, se obtienen 10 características de entrada que están estrechamente relacionadas con el abandono. A continuación se utilizan estas funciones de entrada para llevar a cabo el trabajo de modelado. Estas 10 características de entrada incluyen: si se trata de una persona de edad avanzada, período de contrato, años de uso, método de pago, consumo mensual, si usar servicios de red y si adoptar seguridad de red, respaldo de red y protección de equipo cuando se usan servicios de red 3. Soporte técnico.

3.1 Ingeniería de características
El propósito de la ingeniería de características es encontrar la forma correcta de representar los datos. Según el contenido de datos y el tipo de datos de la función de entrada y la función de salida, he dividido las 10 funciones de entrada actuales en cuatro categorías:
(1) El contenido de datos de la primera función es: 'sí' o 'no'. Las variables que actualmente pertenecen a este tipo de características son: si son de edad avanzada o si están perdidas. Puede adoptar directamente la variable 0-1 para codificar. Entre ellos, '1' significa 'sí' y '0' significa 'no'.

SeniorCitizen=list(Te_data['SeniorCitizen'])
Churn=list(Te_data['Churn'])
#将Churn转化为0-1变量
for i in range(Te_data.shape[0]):
    if Churn[i]=='Yes':
        Churn[i] = 1
    else :
        Churn[i] = 0

(2) El tipo de datos del segundo tipo de características es discreto y su contenido de datos es un atributo nominal. El atributo nominal significa que el valor de los datos solo proporciona suficiente información para distinguir los objetos, y no tiene ningún orden o importancia de cálculo numérico. . Las variables que actualmente pertenecen a este tipo de característica son: duración del contrato y si se deben usar los servicios de red. Dichas variables están codificadas en la forma One-Hot para construir variables virtuales.

Contract=Te_data['Contract']
Contract_dummies=pd.get_dummies(Contract)
InternetService=Te_data['InternetService']
InternetService_dummies=pd.get_dummies(InternetService)

(3) El tipo de datos y los atributos de contenido de datos del tercer tipo de características son los mismos que los del segundo tipo. Sin embargo, la codificación con variables 0-1 es suficiente para expresar el contenido de la información que contiene, por lo que no es necesario utilizar variables virtuales para representar cada categoría, lo que resulta en características redundantes. Dichas características incluyen: métodos de pago, ya sea para usar la seguridad de la red, la copia de seguridad de la red, la protección del dispositivo y el soporte técnico al usar los servicios de red. La razón de las características del método de pago que utiliza la variable 0-1 es que solo cuando se utiliza un cheque electrónico para el pago, la tasa de cancelación será significativamente diferente (como se analiza en la tarea 2, que se muestra en la figura a continuación). Por lo tanto, esta característica del método de pago solo necesita distinguir si se trata de un usuario de cheque electrónico o de un usuario de cheque no electrónico. Sobre la base de que los usuarios tienen servicios de red, las características de servicio adicionales como la seguridad de la red, la copia de seguridad de la red, la protección del dispositivo y el soporte técnico solo necesitan distinguir si poseen el servicio adicional y no es necesario expresar la información de que son usuarios de los servicios de red. Entonces, la variable 0-1 también se usa para codificar.
Inserte la descripción de la imagen aquí

#将PaymentMethod ,OnlineSecurity,OnlineBackup,DeviceProtection ,TechSupport 转化为0-1编码
PaymentMethod=list(Te_data['PaymentMethod'])
OnlineSecurity=list(Te_data['OnlineSecurity'])
OnlineBackup=list(Te_data['OnlineBackup'])
DeviceProtection=list(Te_data['DeviceProtection'])
TechSupport=list(Te_data['TechSupport'])
for i in range(Te_data.shape[0]):
    if PaymentMethod[i]=='Electronic check':
        PaymentMethod[i] = 1
    else :
        PaymentMethod[i] = 0
        
    if OnlineSecurity[i]=='Yes':
        OnlineSecurity[i] = 1
    else :
        OnlineSecurity[i] = 0

    if OnlineBackup[i]=='Yes':
        OnlineBackup[i] = 1
    else :
        OnlineBackup[i] = 0

    if DeviceProtection[i]=='Yes':
        DeviceProtection[i] = 1
    else :
        DeviceProtection[i] = 0

    if TechSupport[i]=='Yes':
        TechSupport[i] = 1
    else :
        TechSupport[i] = 0

(4) El tipo de datos de la cuarta característica es numérico, y su contenido de datos tiene el significado numérico del orden y las operaciones de suma y resta.
Las variables que actualmente pertenecen a este tipo de características son: años de uso, consumo mensual. Tengo la intención de adoptar el método de discretización de características continuas. La razón es que las características discretizadas son más robustas que los datos anormales, lo que reduce el riesgo de sobreajuste, el modelo será más estable y el efecto de predicción será mejor.
La discretización de datos también se llama operación de agrupación, y sus métodos se dividen en agrupación supervisada (agrupación de chi-cuadrado, agrupación de entropía mínima) y agrupación no supervisada (agrupación de frecuencia igual, agrupación isométrica). Esta vez, la operación es utilizar el binning de frecuencia igual en el binning no supervisado.

tenure=list(Te_data['tenure'])
tenure_cats=pd.qcut(tenure,6)
tenure_dummies=pd.get_dummies(tenure_cats)

MonthlyCharges=list(Te_data['MonthlyCharges'])
MonthlyCharges_cats=pd.qcut(MonthlyCharges,5)
MonthlyCharges_dummies=pd.get_dummies(MonthlyCharges_cats)

Finalmente, se obtienen 23 características de entrada y una característica de salida del modelo.

#模型输出y
Churn_y=np.array(Churn).reshape(-1,1)

#模型输入x
SeniorCitizen_x=np.array(SeniorCitizen).reshape(-1,1)
Contract_x=Contract_dummies.values
InternetService_x=InternetService_dummies.values
PaymentMethod_x=np.array(PaymentMethod).reshape(-1,1)
OnlineSecurity_x=np.array(OnlineSecurity).reshape(-1,1)
OnlineBackup_x=np.array(OnlineBackup).reshape(-1,1)
DeviceProtection_x=np.array(DeviceProtection).reshape(-1,1)
TechSupport_x=np.array(TechSupport).reshape(-1,1)
tenure_x=tenure_dummies.values
MonthlyCharges_x=MonthlyCharges_dummies.values

X=np.concatenate([SeniorCitizen_x,Contract_x,InternetService_x,PaymentMethod_x,OnlineSecurity_x,\ OnlineBackup_x,DeviceProtection_x,TechSupport_x,tenure_x,MonthlyCharges_x],axis=1)

3.2 Construcción del modelo
Intente utilizar el modelo clásico de clasificación binaria del árbol de decisión como nuestro modelo de aprendizaje automático. La ventaja del árbol de decisión es que el modelo es fácil de entender y puede visualizarse, y puede comprender mejor qué características tienen un mayor impacto en el resultado de salida. Pero las deficiencias también son muy obvias, eso es fácil de sobreajustar y un bajo rendimiento de generalización.

#数据导入
import pandas as pd
import numpy as np
data_frame=pd.read_excel("Save_X.xlsx")
X=np.array(data_frame.values[:,1:])
data_frame2=pd.read_excel("Save_y.xlsx")
y=np.array(data_frame2.values[:,1])
#模型训练
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
x_train, x_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
tree = DecisionTreeClassifier(max_depth=6,random_state=0)
tree.fit(x_train,y_train)
print("training set score:{:.3f}".format(tree.score(x_train, y_train)))
print("test set score:{:.3f}".format(tree.score(x_test, y_test)))
print("Feature importances : \n{}".format(tree.feature_importances_))

Almacené las características procesadas en una hoja de Excel y las leí nuevamente al modelar. El modelo DecisionTreeClassifier de la biblioteca sklearn se utiliza para modelar y entrenar. La profundidad del árbol se establece en 6, la bondad de ajuste del conjunto de entrenamiento es 0.805 y la bondad de ajuste del conjunto de prueba es 0.798, lo que indica que las características de entrada actuales explican el objetivo del modelo Efecto de predicción más fuerte y mejor.

3.3 Visualización y conclusión de resultados Obtenga
además el índice de importancia de cada característica de entrada en el modelo de predicción y visualícelo como se muestra en la figura a continuación:

#特征重要性可视化
import matplotlib.pyplot as plt
def plot_feature_importance(model):
    n_features = data_frame.shape[1]
    plt.barh(range(n_features-1),model.feature_importances_,align='center')
    plt.yticks(range(n_features-1),data_frame.columns[1:])
    plt.xlabel('Features importance')
    plt.ylabel('feature')
plot_feature_importance(tree)
plt.show()

Inserte la descripción de la imagen aquí
Los indicadores que tienen una mayor influencia en la decisión del modelo incluyen: si el período del contrato es 'mes a mes', si el cliente es un usuario de la red de fibra óptica, si el cliente ha sido utilizado por menos de 4 meses y si el cliente utiliza cheques electrónicos como método de pago. Pueden reflejar mejor la diferencia entre los clientes abandonados y los que no lo están, de modo que el modelo puede hacer una clasificación correcta. También podemos visualizar el árbol de decisión para comprender mejor el proceso de decisión del modelo:

#决策树可视化
from sklearn.tree import export_graphviz
export_graphviz(tree,out_file='te_tree.dot',class_names=['Churn_no','Churn_yes'],feature_names=data_frame.columns[1:],impurity=False,filled=True)

import graphviz
with open("te_tree.dot") as f:
    dot_graph=f.read()
graph=graphviz.Source(dot_graph)
graph.render("tree")

Dado que el árbol de decisión es demasiado grande, solo mostramos subárboles parciales y observamos las conclusiones que podemos extraer del proceso de decisión de estos subárboles:
Inserte la descripción de la imagen aquí
si el primer subárbol se desarrolla a partir de un grupo de usuarios con la función de clasificación de usuarios de servicios de red Aquí La cuadrícula roja y la cuadrícula blanca representan clientes que no abandonan, y la cuadrícula azul representa clientes que no abandonan. Se puede encontrar claramente que los usuarios de servicios de red tienen más probabilidades de convertirse en clientes perdidos a menos que no sean ancianos y soliciten el servicio adicional de seguridad de red; los usuarios de servicios que no son de red tienen menos probabilidades de convertirse en clientes perdidos a menos que sean ancianos Usuarios que pagan con cheque electrónico. Basado en el análisis anterior, se da una recomendación operativa:
1) Cuando un usuario joven es un usuario de un servicio de red, puede recomendar servicios adicionales para la seguridad de la red para evitar que pierda clientes debido a problemas básicos de la red.

Inserte la descripción de la imagen aquí
El segundo subárbol se desarrolla a partir de un grupo de usuarios con una clasificación característica de si la vida útil es de 4 meses a 14 meses. La misma cuadrícula roja y la cuadrícula blanca representan a los clientes que no abandonan, y la cuadrícula azul representa a los clientes que abandonan. Los clientes con una vida útil de 4 meses a 14 meses tienen más probabilidades de convertirse en clientes perdidos a menos que el consumo mensual alcance el rango de 58,92 yuanes a 79,15 yuanes; además, la vida útil es de entre 14 meses y 29 meses Entre los clientes también son fáciles de perder. Según el análisis anterior, se ofrece una recomendación operativa:
2) Para los clientes con una vida útil de menos de 29 meses, es más probable que experimenten pérdidas y necesitan continuar invirtiendo para retener estrategias operativas.

Inserte la descripción de la imagen aquí
El tercer subárbol se desarrolla a partir del grupo de usuarios de la característica clasificada de los usuarios del servicio de seguridad de red. Si un cliente solicita servicios de seguridad de red, es más probable que no se escape a menos que sea una persona mayor; y un cliente que no solicita servicios de seguridad de red es más probable que se pierda a menos que solicite asistencia técnica . Con base en el análisis anterior, se da una recomendación operativa de la siguiente manera:
3) El grupo de clientes de edad avanzada siempre es un cliente propenso a la deserción y debe prestar atención y comprender sus necesidades de servicio de manera oportuna.

Finalmente, desde la perspectiva de todo el árbol, también se pueden sacar algunas conclusiones:
4) Cuanto más corto sea el período del contrato, más probabilidades hay de que los usuarios pierdan. Por lo tanto, cuando las empresas de telecomunicaciones realizan trabajos de promoción, deben firmar un contrato a largo plazo con los nuevos usuarios tanto como sea posible.
5) Los usuarios que usan la tecnología de red de fibra óptica son más propensos a la deserción que los usuarios que usan otros servicios. Es necesario prestar atención a los problemas actuales de este servicio y brindar mejoras oportunas.

Además, si desea mejorar aún más la precisión de predicción del modelo, puede utilizar una serie de modelos mejorados, como el árbol de elevación.

Si está interesado en el indicador del valor de por vida del cliente, continúe navegando en la próxima publicación del blog: Análisis de datos de pérdida de clientes de telecomunicaciones (3)

2 artículos originales publicados · Me gusta0 · Visitas15

Supongo que te gusta

Origin blog.csdn.net/gdben_user/article/details/105653763
Recomendado
Clasificación