Travel Tips
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
自动识别窃漏电用户-逻辑回归
目前防窃漏电方法主要有两种:
通过定期巡检、定期校验电表、用户举报窃电等手段来发现窃电或计量装置故障。
利用计量异常报警功能和电能量数据查询功能实现在线监控工作,通过采集电量异常、负荷异常、终端报警、主站报警、线损异常等信息,来实时监测窃漏电情况和发现计量装置的故障。根据报警事件发生前后客户计量点有关的电流、电压、负荷数据情况等,实现用电故障及类型的甄别。
缺点:
对人的依赖性太强,抓窃查漏的目标不明确;
由于终端误报或漏报过多,无法达到真正快速精确定位窃漏电嫌疑用户的目的。
为了解决以上两种方法遇到的问题,采用电力计量自动化系统,构建自动识别模型:
采集各相电流、电压、功率因数等用电负荷数据以及用电异常等终端报警信息(业务);
异常告警信息和用电负荷数据能够反映用户的用电情况(数据);
稽查工作人员也会通过在线稽查系统和现场稽查来查找出窃漏电用户(业务),并录入系统;
从数据信息提取出窃漏电用户的关键特征(数据),达到自动识别窃漏电用户的目的;
达到自动检查判断用户是否存在窃漏电行为。
我们将业务问题进行理解,从数据分析的角度进行阐述。建模目标为:
归纳出窃漏电用户的关键特征,构建窃漏电用户的识别模型;
利用实时监测数据,调用窃漏电用户识别模型实现实时诊断。
分析方法与大致过程如下:
数据处理之数据筛选:窃漏电用户在自动化系统的监控大用户中只占小部分,同时某些大用户也不可能存在窃漏电行为,如银行、税务等类别,故在数据预处理时有必要将这些类别用户剔除。
数据处理之数据探索:系统中的用电负荷不能直接体现出用户的窃漏电行为,终端报警存在很多误报和漏报的情况,需要进行数据探索和预处理,总结窃漏电用户的行为规律,再从数据中提炼出漏电用户的特征指标。
构建分类模型:通过数据信息提取出窃漏电用户的关键特征,构建窃漏电用户的识别模型,就可以自动检查判断用户是否存在窃漏电行为。
根据数据探索及业务理解,我们构建业务指标体系:
模型评估
#显示当前工作目录 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")
#-*- 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))
将数据分为训练数据和测试数据
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)
scores = cross_val_score(model, X_train, Y_train, cv=10) print("准确率", np.mean(scores), scores)
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)
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()
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
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
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.
December 4, 2020 at 3:12 pm
我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum
Rosie
6 minutes ago