欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

窃漏电用户分析——建构决策树模型

程序员文章站 2022-07-12 17:56:56
...
 In[1]:
import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score,recall_score,f1_score
from sklearn.tree import DecisionTreeClassifier,export_graphviz
import os
import pydotplus
import scipy.stats as ss
import matplotlib.pyplot as plt
import seaborn as sns   # 画图库
plt.style.use('ggplot')
plt.rcParams['font.sans-serif']=['SimHei']   #设置中文字体为黑体
plt.rcParams['axes.unicode_minus']=False

In[2]:
#导入文件两个例子,一个是正常用电,一个是非正常用电,非正常用电用户的电量呈逐渐下降趋势
period= pd.read_csv("Ele_pow.csv",index_col=0)  #第一行为字段名
#导入建模的文件,其中包括了特征【电量趋势下降指标、线损指标、告警类指标】,以及标签【是否窃漏电】,均已进行过预处理(数据清洗、归一化等)
modeling=pd.read_excel("model.xls",encoding='utf-8')

In[3]:
period.plot()
plt.show()  #正常和非正常的电量分析

窃漏电用户分析——建构决策树模型

In[4]:
modeling.corr() #分析指标之间的相关性,通过热力图呈现相关状况
sns.heatmap(modeling.corr(),vmin=-1,vmax=1,cmap=sns.color_palette("RdBu_r", 18))  
plt.show()

窃漏电用户分析——建构决策树模型

In[5]:
from sklearn import model_selection
from sklearn.model_selection import train_test_split   #划分数据集的选择工具

In[6]:
x=modeling[['电量趋势下降指标','线损指标','告警类指标']]
y=modeling['是否窃漏电']
In[7]:
X_train,x_test,Y_train,y_test=train_test_split(x,y,test_size=0.2)

In[8]:
tree=DecisionTreeClassifier(max_depth=6,min_samples_leaf=2)
tree.fit(X_train,Y_train)
Y_predDT=tree.predict(x_test)
print("DesicionTree Model:")
print("DT-ACC:",accuracy_score(y_test,Y_predDT))
print("DT-REC:",recall_score(y_test,Y_predDT))
print("DT-F1:",f1_score(y_test,Y_predDT))
roc_auc_score_DT = roc_auc_score(y_test,Y_predDT)
print("The ROC of DT:",roc_auc_score_DT) #auc值通常在0.5-1之间,越接近1,模型拟合效果越好

Out[9]:
DesicionTree Model:
DT-ACC: 0.9491525423728814
DT-REC: 0.875
DT-F1: 0.823529411764706
The ROC of DT: 0.9178921568627452   #可见模型拟合效果较好

In[10]:
from sklearn.tree import export_graphviz
dot_data = export_graphviz(tree, out_file=None,
						   feature_names=['Down','Damagine','Warning'],
				           class_names=['Y','N'],
                           filled=True, rounded=True, special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("tree.pdf")

*决策树可视化结果:

窃漏电用户分析——建构决策树模型

相关标签: 建模