随机森林或决策树模型对客户流失预测

论文标题:基于数据挖掘的客户流失预测

对数据进行清洗与预处理,再建立预测模型

img


[数据](链接:https://pan.baidu.com/s/1OJfVDDzHT1UXf5ASFHsH0A?pwd=1111
提取码:1111)

写的好追加红包!

运行结果

img

img

该答案引用ChatGPT的部分内容:
以下是使用随机森林或决策树模型对客户流失进行预测的Python代码:

# 导入所需的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 读取数据
data = pd.read_excel('data.xlsx')

# 数据预处理
# 去除不需要的列
data.drop(['RowNumber', 'CustomerId', 'Surname'], axis=1, inplace=True)
# 将分类变量进行one-hot编码
data = pd.get_dummies(data, columns=['Geography', 'Gender'], drop_first=True)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.drop('Exited', axis=1), 
                                                    data['Exited'], 
                                                    test_size=0.2, 
                                                    random_state=42)

# 建立随机森林模型并进行训练
rfc = RandomForestClassifier(n_estimators=100, random_state=42)
rfc.fit(X_train, y_train)

# 进行预测并输出准确率
y_pred = rfc.predict(X_test)
print("Random Forest Accuracy:", accuracy_score(y_test, y_pred))

# 建立决策树模型并进行训练
dtc = DecisionTreeClassifier(random_state=42)
dtc.fit(X_train, y_train)

# 进行预测并输出准确率
y_pred = dtc.predict(X_test)
print("Decision Tree Accuracy:", accuracy_score(y_test, y_pred))

这段代码首先导入了所需的库,然后使用Pandas读取了名为data.xlsx的数据文件。数据预处理的步骤包括删除不需要的列、对分类变量进行one-hot编码,以及划分训练集和测试集。接下来分别建立了随机森林和决策树模型,并使用训练集进行训练。最后进行预测并输出准确率。

运行结果如下:

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
本文旨在通过数据挖掘技术构建预测模型,预测客户是否会流失。所选用的模型为随机森林和决策树模型。

数据清洗和预处理:

  1. 删除重复值
  2. 处理缺失值
  3. 处理异常值
  4. 特征工程,包括特征提取、特征缩放和特征选择

建立预测模型:

  1. 将数据集分为训练集和测试集。
  2. 采用随机森林和决策树两个模型进行训练和测试,并比较两个模型的表现。
  3. 对模型进行参数调优,以优化模型表现。
  4. 最终选择表现最优的模型进行应用。

以下是具体代码实现:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 读取数据
df = pd.read_csv('data.csv')

# 删除重复值
df.drop_duplicates(inplace=True)

# 处理缺失值
df['age'].fillna(df['age'].mean(), inplace=True)
df['income'].fillna(df['income'].mode()[0], inplace=True)
df['education'].fillna(df['education'].mode()[0], inplace=True)

# 处理异常值
df = df[df['income'] > 0]

# 特征缩放
scaler = StandardScaler()
df[['age', 'income']] = scaler.fit_transform(df[['age', 'income']])

# 特征选择
features = ['gender', 'age', 'income', 'education', 'marital_status']
target = 'churn'

X = df[features]
y = df[target]

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 随机森林模型
rf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)
rf.fit(X_train, y_train)
rf_pred = rf.predict(X_test)
rf_acc = accuracy_score(y_test, rf_pred)

print("随机森林模型准确率为:", rf_acc)

# 决策树模型
dt = DecisionTreeClassifier(max_depth=5, random_state=42)
dt.fit(X_train, y_train)
dt_pred = dt.predict(X_test)
dt_acc = accuracy_score(y_test, dt_pred)

print("决策树模型准确率为:", dt_acc)

# 对模型进行参数调优
# 略,可使用网格搜索进行调优
# ...

# 最终选择表现最优的模型进行应用
# 略,可使用交叉验证进行选择
# ...

以上代码实现了随机森林和决策树模型的训练和测试,并比较了两个模型的表现。此外,代码还进行了特征工程,包括特征缩放和特征选择。最终,可对模型进行参数调优和选择,以取得更好的预测表现。
如果我的回答解决了您的问题,请采纳!

该回答引用ChatGPT
根据题目的要求,需要使用随机森林或决策树模型对客户流失进行预测。下面将展示使用Python的scikit-learn库来完成这项任务的过程。

首先,导入所需的库和数据集:

python
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix

#读取数据
df = pd.read_csv('customer_churn.csv')


了解一下数据的基本信息,包括数据集的形状,前几行样本,以及每个特征的分布统计情况:

python
#数据基本信息
print(df.shape)
print(df.head())

#特征的分布统计情况
print(df.describe())


接下来,对数据进行清洗和预处理,包括去除无用的特征和处理缺失值:

python
#去除无效的ID特征和地区信息特征
df.drop(['customerID','Region'], axis=1, inplace=True)

#处理缺失值,将“Unknown”替换为缺失值
df.replace(' ', np.nan, inplace=True)
df.replace('Unknown', np.nan, inplace=True)

#检查缺失值情况
print(df.isnull().sum())


接下来,对于缺失值,我们可以选择删除或填充。这里我们选择对缺失值进行填充。

我们可以使用fillna()函数来填充缺失值:对于数值型特征,可以使用均值或中位数进行填充;对于离散型特征,可以使用众数进行填充。

函数fillna()的inplace参数选择True表示在原数据集上进行填充。

python
#填充缺失值
df['Total Charges'] = pd.to_numeric(df['Total Charges'])
df['Total Charges'].fillna(df['Total Charges'].mean(), inplace=True)

df['Senior Citizen'].fillna(value=0, inplace=True)
df['Dependents'].fillna(value='No', inplace=True)
df['Partner'].fillna(value='No', inplace=True)

df['Phone Service'].fillna(value='Yes', inplace=True)
df['Multiple Lines'].fillna(value='No phone service', inplace=True)
df['Online Security'].fillna(value='No internet service', inplace=True)
df['Online Backup'].fillna(value='No internet service', inplace=True)
df['Device Protection'].fillna(value='No internet service', inplace=True)
df['Tech Support'].fillna(value='No internet service', inplace=True)
df['Streaming TV'].fillna(value='No internet service', inplace=True)
df['Streaming Movies'].fillna(value='No internet service', inplace=True)

df['Contract'].fillna(value='Month-to-month', inplace=True)
df['Paperless Billing'].fillna(value='Yes', inplace=True)


接下来,我们需要将离散型变量进行One-Hot编码(独热编码),因为决策树和随机森林模型只能处理离散的数值特征。

我们可以使用pandas模块的get_dummies函数对离散型特征进行One-Hot编码:

python
#离散型特征进行One-Hot编码
df = pd.get_dummies(df, columns=['gender','Senior Citizen','Partner','Dependents','Phone Service','Multiple Lines','Internet Service','Online Security','Online Backup','Device Protection','Tech Support','Streaming TV','Streaming Movies','Contract','Paperless Billing','Payment Method','Churn'], drop_first=True)


现在我们已经将所有特征转换成数值型特征,随机森林和决策树模型可以直接处理。

然后,我们需要将数据集分成训练集和测试集。我们选择将70%的数据用于训练,30%用于测试。这可以使用train_test_split函数实现:

python
X = df.drop('Churn_Yes', axis=1)
y = df['Churn_Yes']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)


接下来,我们就可以使用决策树和随机森林模型进行建模了。

首先,我们先使用决策树模型:

python
dtree = DecisionTreeClassifier()
dtree.fit(X_train, y_train)

#使用测试集评估模型
predictions = dtree.predict(X_test)
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test, predictions))


接下来,我们使用随机森林模型:

python
rfc = RandomForestClassifier(n_estimators=200)
rfc.fit(X_train, y_train)

#使用测试集评估模型
predictions = rfc.predict(X_test)
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test, predictions))


另外,我们还可以查看特征的重要性,这可以帮助我们了解哪些特征更重要。

python
feature_importances = pd.DataFrame(rfc.feature_importances_,
index = X_train.columns,
columns=['importance']).sort_values('importance',ascending=False)
print(feature_importances)


最后,我们可以根据模型结果来决策如何优化客户流失情况。不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^