Python数据挖掘015-电力窃漏电自动识别

本项目的目标是通过电量异常数据,负荷异常数据,终端报警数据,主站报警,线损异常数据等信息,建立数据分析模型,来实时检测窃漏电情况或发现计量装置故障的作用。

主要任务是:归纳出窃漏电用户的关键特征,构建窃漏电用户的识别模型,利用实时监测数据,调用窃漏电用户识别模型实现实时诊断。

image.png

1. 准备数据集

抽取某市近5年来所有的窃漏电用户有关数据和不同用电类型正常用电用户共208个用户的有关数据,同时包含每天是否由窃漏电情况的标识。

显然这是一个有监督的分类问题。

1.1 数据探索分析

本案例主要采用分布分析和周期性分析等方法对电量数据进行数据探索分析。
分布分析作图如下:


image.png

对正常用电用户的周期性分析如下:


image.png

窃漏电用户用电量的周期性分析为:

image.png

根据正常用户和窃漏电用户的周期性分析对比结果可以发现:正常用户用电量保持基本稳定,而窃漏电用户用电量持续下降,故而可以根据这个特性来识别。

2. 数据预处理

包括由数据清洗,缺失值处理,数据变换等

数据清洗,此处发现非居民用电不可能存在窃漏电现象,故而将非居民用地那类别的用电数据过滤掉,同时,节假日和工作日相比会明显偏低,所以过滤掉节假日的用电数据。(话说,这样简化的太多了吧。)

本案例采用拉格朗日插值法对缺失值进行插补。
代码为:

#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):
  y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数
  y = y[y.notnull()] #剔除空值
  return lagrange(y.index, list(y))(n) #插值并返回插值结果

#逐个元素判断是否需要插值
for i in data.columns:
  for j in range(len(data)):
    if (data[i].isnull())[j]: #如果为空即插值。
      data[i][j] = ployinterp_column(data[i], j)

插值前后的对比结果为:

数据变换:原始的特征有时并不能非常好的表示类别之间的差异,所以有必要自己构建更具有特征意义的特征,这个也可以看成是特征工程。

本案例中,人为的建立了几种指标,比如电量趋势下降指标,线损指标,告警类指标来作为特征。

其中的电量趋势下降指标为:统计当天比前一天电量减少的天数之和,计算前后各5天,一共11天的情况。其意义在于:递减的天数越多,表明窃漏电的可能性越大。
线损指标用于衡量供电线路的损失比例,如果由用户发生窃漏电,那么当天的线损指标会上升,但考虑的是前后几天的线损率平均值。
告警类指标:与窃漏电相关的终端报警主要由电压缺相,电压断相,电流反极性等告警,计算这些告警的次数总和。

所以此处建立的数据集的特征就是这三个指标,标签为是否有窃漏电,这是一个标准的二分类问题。

如下为数据集的一部分:

image.png

3. 构建模型

3.1 神经网络模型

from keras.models import Sequential #导入神经网络初始化函数
from keras.layers.core import Dense, Activation #导入神经网络层函数、激活函数

net = Sequential() #建立神经网络
net.add(Dense(10,activation='relu',input_shape=(3,))) # 此处有3个特征
net.add(Dense(1,activation='sigmoid')) #添加隐藏层(10节点)到输出层(1节点)的连接#输出层使用sigmoid激活函数
net.compile(loss = 'binary_crossentropy', optimizer = 'adam',metrics=['accuracy']) #编译模型,使用adam方法求解

net.fit(train.iloc[:,:-1], train.iloc[:,-1], 
        epochs=200, batch_size=10,
        validation_data=(test.iloc[:,:-1],test.iloc[:,-1])) 
image.png
image.png
image.png

由此可见,不管是train set还是val set,,都得到了0.9以上的准确率

3.2 Cart决策树模型

from sklearn.tree import DecisionTreeClassifier #导入决策树模型
tree = DecisionTreeClassifier() #建立决策树模型
tree.fit(train.iloc[:,:3],train.iloc[:,3]) #训练

cm = confusion_matrix(train.iloc[:,3], tree.predict(train.iloc[:,:3])) #混淆矩阵
plt.matshow(cm, cmap=plt.cm.Greens) #画混淆矩阵图,配色风格使用cm.Greens,更多风格请参考官网。
plt.colorbar() #颜色标签
for x in range(len(cm)): #数据标签
    for y in range(len(cm)):
        plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center')

plt.ylabel('True label') #坐标轴标签
plt.xlabel('Predicted label') #坐标轴标签

from sklearn.metrics import roc_curve #导入ROC曲线函数

fpr, tpr, thresholds = roc_curve(test.iloc[:,3], tree.predict_proba(test.iloc[:,:3])[:,1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label = 'ROC of CART', color = 'green') #作出ROC曲线
plt.xlabel('False Positive Rate') #坐标轴标签
plt.ylabel('True Positive Rate') #坐标轴标签
plt.ylim(0,1.05) #边界范围
plt.xlim(0,1.05) #边界范围
plt.legend(loc=4) #图例
plt.show() #显示作图结果
image.png
image.png

参考资料:

《Python数据分析和挖掘实战》张良均等

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,362评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,577评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,486评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,852评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,600评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,944评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,944评论 3 447
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,108评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,652评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,385评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,616评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,111评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,798评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,205评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,537评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,334评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,570评论 2 379

推荐阅读更多精彩内容