Search

Travel Tips

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lifestyle

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Hotel Review

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

数据建模——自动识别窃漏电用户

自动识别窃漏电用户-逻辑回归

自动识别窃漏电用户

业务分析与指标体系建立


业务背景

目前防窃漏电方法主要有两种:

  • 通过定期巡检、定期校验电表、用户举报窃电等手段来发现窃电或计量装置故障。

  • 利用计量异常报警功能和电能量数据查询功能实现在线监控工作,通过采集电量异常、负荷异常、终端报警、主站报警、线损异常等信息,来实时监测窃漏电情况和发现计量装置的故障。根据报警事件发生前后客户计量点有关的电流、电压、负荷数据情况等,实现用电故障及类型的甄别。


缺点:

  • 对人的依赖性太强,抓窃查漏的目标不明确;

  • 由于终端误报或漏报过多,无法达到真正快速精确定位窃漏电嫌疑用户的目的。

目的


为了解决以上两种方法遇到的问题,采用电力计量自动化系统,构建自动识别模型:

  • 采集各相电流、电压、功率因数等用电负荷数据以及用电异常等终端报警信息(业务);

  • 异常告警信息和用电负荷数据能够反映用户的用电情况(数据);

  • 稽查工作人员也会通过在线稽查系统和现场稽查来查找出窃漏电用户(业务),并录入系统;

  • 从数据信息提取出窃漏电用户的关键特征(数据),达到自动识别窃漏电用户的目的;

  • 达到自动检查判断用户是否存在窃漏电行为。


我们将业务问题进行理解,从数据分析的角度进行阐述。建模目标为:

  •  归纳出窃漏电用户的关键特征,构建窃漏电用户的识别模型;

  • 利用实时监测数据,调用窃漏电用户识别模型实现实时诊断。


搭建数据模型准备

image.png

分析方法与大致过程如下:

  • 数据处理之数据筛选:窃漏电用户在自动化系统的监控大用户中只占小部分,同时某些大用户也不可能存在窃漏电行为,如银行、税务等类别,故在数据预处理时有必要将这些类别用户剔除。

  • 数据处理之数据探索:系统中的用电负荷不能直接体现出用户的窃漏电行为,终端报警存在很多误报和漏报的情况,需要进行数据探索和预处理,总结窃漏电用户的行为规律,再从数据中提炼出漏电用户的特征指标。

  • 构建分类模型:通过数据信息提取出窃漏电用户的关键特征,构建窃漏电用户的识别模型,就可以自动检查判断用户是否存在窃漏电行为。

根据数据探索及业务理解,我们构建业务指标体系:

image.png

模型构建与评估

image.png

模型评估

image.png

image.png

image.png

image.png

image.png

模型解释

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

R语言实现

#显示当前工作目录
getwd()  
  #导入数据集
loudian<-read.csv(file="logist_model.csv")     
  #查看数据集前六行
head(loudian)   
  #查看数据集描述
summary(loudian) 
str(loudian)
loudian$is_steal_index=as.factor(loudian$is_steal_index)
str(loudian)
  #建立逻辑回归模型
logist_1=glm(is_steal_index~trend_index+line_lost_index+waring_index,family=binomial(link='logit'),data=loudian)
  #逻辑回归模型描述
summary(logist_1)
  ##查看回归系数
coef(logist_1)
  ##回归系数指数化
exp(coef(logist_1))
logist_1
  #输出预测之后的结果,type=response,表示输出结果预测响应变量为1的概率。 
pre=predict(logist_1,type='response')
class<-pre>0.5
class
print(logist_1)
  #对分类和预测结果进行统计分析计数(混淆矩阵)
tb<-table(loudian$is_steal_index,pre > 0.5)
tb  
#分类准确率--稍后作对比
(sum(diag(tb))/sum(tb))
  #绘制ROC曲线,寻找最优临界点
library(pROC)
modelroc=roc(loudian$is_steal_index,pre)
plot(modelroc,print.auc=TRUE,auc.polygon=TRUE,grid=c(0.1,0.2),
     grid.col=c("green","red"),max.auc.polygon=TRUE,auc.polygon.col="blue",print.thres=TRUE)
  #将预测的结果与数据合并,并验证
loudian_pre<- data.frame(is_steal_index=loudian$is_steal_index,predict =ifelse(pre>0.167,'1','0'))
table(loudian_pre$is_steal_index,loudian_pre$predict)
  #讨论
loudian_auc<-table(loudian_pre$is_steal_index,loudian_pre$pre)
loudian_auc
(sum(diag(loudian_auc))/sum(loudian_auc))
loudian_0.5<-table(loudian$is_steal_index,pre > 0.5)
loudian_0.5
(sum(diag(loudian_0.5))/sum(loudian_0.5))
save(loudian, file = "logist_model.Rdata")

朴素贝叶斯的内在逻辑

image.png

image.png

image.png

image.png

image.png

image.png

image.png

Python实现


# 导入所需的库


#-*- coding:utf-8 -*-
import pandas as pd
import numpy as np
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
导入并查看数据
data_lr = pd.read_excel('logist_model.xlsx','logist_model')
print(data_lr.head(10))

image.png

  将数据分为训练数据和测试数据

array = data_lr.values
X_train =array[0:200,2:5]
Y_train = array[0:200, 5]
X_test =array[200:291,2:5]
Y_test = array[200:291,5]

逻辑回归

#num_folds = 10
#seed = 7
#kfold = KFold(n_splits=num_folds, random_state=seed)
model = LogisticRegression(solver='liblinear')
model.fit(X_train, Y_train)

image.png

效果评估

准确率

scores = cross_val_score(model, X_train, Y_train, cv=10)
print("准确率", np.mean(scores), scores)

image.png

效果评估

混淆矩阵

from sklearn.metrics import confusion_matrix
predicted = model.predict(X_test)
matrix = confusion_matrix(Y_test, predicted)
classes = ['0', '1']
dataframe = pd.DataFrame(data=matrix,index=classes,columns=classes)
print(dataframe)

image.png

效果评估

AUC

from sklearn.metrics import roc_curve, auc
predictions = model.predict_proba(X_test)
fpr, tpr, thresholds = roc_curve(Y_test, predictions[:,1])
roc_auc = auc(fpr, tpr)
import matplotlib.pyplot as plt
plt.plot(fpr, tpr,'b', label='auc=%0.2f' % roc_auc)
plt.legend(loc ='lower right')
plt.plot([0, 1],[0,1],'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel("fpr")
plt.ylabel("tpr")
plt.show()

image.png

这是一个简介
    互联网冲浪金牌选手。赖床世锦赛纪录保持者,拖延俱乐部顶级VIP,夜宵外卖一级鉴赏师,国家脱单脱贫重点扶持对象,中央戏精学院优秀学生,亚洲酸柠檬推广大使,国家一级退堂鼓表演艺术家。
评论 (125)
评论

我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum

Rosie

6 minutes ago

Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor

Agatha Christie

December 4, 2020 at 3:12 pm

Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor

Steven

December 4, 2020 at 3:12 pm

Donec in ullamcorper quam. Aenean vel nibh eu magna gravida fermentum. Praesent eget nisi pulvinar, sollicitudin eros vitae, tristique odio.

Danielle Steel

December 4, 2020 at 3:12 pm