实战一、电力窃漏用户自动识别

实战一、电力窃漏用户自动识别

取自《Python数据分析与挖掘实战》一书
学会绘制混淆矩阵图、ROC图、使用LM神经网络预测,决策树预测,拉格朗日插值法,下降趋势指标。


一、数据抽取

主要有用电负荷数据、终端报警数据、违约窃电处罚信息以及用户档案资料等。

二、数据探索分析

1、数据的分布分析

查看用电类别切漏电情况,明确哪一些人群、领域窃漏电情况严重。

2、周期性分析

正常用电量周期性用量平稳,没有太大波动;窃漏电用户用电量出现明显下降的趋势

3、数据预处理

从原始用户电量数据抽取,发现存在缺失现象,因此用到拉格朗日插值法对缺失值进行插补!

拉格朗日插值法:
确定因变量、自变量;取出缺失值前后5个数据,去除空值,取10个数据组成一组。采用拉格朗日插值公式
Ln(x)=∑(i:0~n)li(x)yi
li(x)=Ⅱ(j:0-n;j!=i)(x-xj)/(xi-xj)
x为缺失值下标序号;Ln(x)为缺失值插值结果,xi为非缺失值yi的下表。

直到不存在缺失值为止

def lagInterploation(data_col, j, n=5):
    dataList = data_col[list(range(j - n, j)) + list(range(j + 1, j + n + 1))]
    dataList = dataList[dataList.notnull()]
    return lagrange(dataList.index, list(dataList))(j)

#寻找缺失值,执行拉格朗日插值公式
for i in data.columns:
for j in range(len(data)):
    if (data[i].isnull())[j]:
        data[i][j] = lagInterploation(data[i], j)

传入该列数据,获取该列非空前后10个数据;
lagrange(x,w) x数据点的x轴,传入的是数据的下标索引;w是传入的数据。
例如:dataList=
0 235.8333
1 236.2708
2 238.0521
3 235.9063
4 236.7604
6 237.4167
7 238.6563
8 237.6042
9 238.0313
10 235.0729
Name: 0, dtype: float64
传入的索引里是不含缺失值下标的!!最后获取(j)位置处的值,即是插值

4、数据变换

基于系统采集到的一些数据,来重新构造,进行数据变换得到新的评价指标来表征窃漏电行为所具有的规律。

  1. 电量趋势下降指标:电量趋势不断下降,则认为具有窃电嫌疑
  2. 线损指标:若发生窃漏电,线损率会上升。是否1%
  3. 告警类指标:电压缺相,电流反极性等

5、构建专家样本

所有窃漏电用户和正常用户的电量、告警及线损数据和该用户在当天是否标识。按窃漏电评价指标进行处理,选取样本,得到专家样本库。
时间–用户编号–电量趋势下降指标–线损指标–告警类指标–是否窃漏电

6、模型构建

数据划分–80%训练集,20%测试集

使用LM神经网络进行预测

神经网络:3–10–1 两层,使用Adam方法求解。隐藏层激活函数Relu(x)=max(x,0)

#特别注意keras版本和底层tensorflow的版本问题,导致代码不匹配。keras2.0.9,tensorflow-1.2.1
net = Sequential()  # 建立神经网络
net.add(Dense(input_dim=3, activation='relu', units=10))  # 输入3---隐藏10
net.add(Dense(input_dim=10, activation='sigmoid', units=1))  #隐藏10---输出1 
net.compile(loss='binary_crossentropy', optimizer='adam',  metrics=['accuracy'])  
# 编译模型,使用adam方法求解;因版本不同,修改。与原代码不同

net.fit(train[:, :3], train[:, 3], epochs=1000, batch_size=1)  # 训练模型
net.save_weights(netfile)  # 保存模型
predict_result = net.predict_classes(train[:, :3]).reshape(len(train))  # 获取预测结果

keras用predict给出预测概率;predict_classes才是给出预测类别。预测结果都是[n,1]维数组!
CART决策树用predict给出预测的类别!

使用CART决策树进行预测
#构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier #导入决策树模型
treefile = '../tmp/tree.pkl' #模型输出名字
tree = DecisionTreeClassifier() #建立决策树模型
tree.fit(train[:,:3], train[:,3]) #训练
from sklearn.externals import joblib
joblib.dump(tree, treefile)#保存模型
plt=cm_plot(test[:,3], tree.predict(test[:,:3]))#将测试集输入到模型中
plt.show() #显示混淆矩阵可视化结果
#注意到Scikit-Learn使用predict方法直接给出预测结果。

7、模型评估

评估模型分类的性能,利用测试样本对模型进行评价,采用ROC曲线评价方法进行评估。
分类器越优秀,其ROC曲线应该尽可能的靠近左上角!

混淆矩阵绘图
# 编写的混淆矩阵的可视化函数 
#y:测试集实际的类别  yp:测试集的测试结果
def cm_plot(y, yp): 
    from sklearn.metrics import confusion_matrix  # 导入混淆矩阵函数
    cm = confusion_matrix(y, yp)  # 混淆矩阵
    #[[39  8]
    # [ 1 11]]

    import matplotlib.pyplot as plt  # 导入作图库
    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')  # 坐标轴标签
    return plt
ROC曲线
from sklearn.metrics import roc_curve  # 导入ROC曲线函数

fpr, tpr, thresholds = roc_curve(test[:, 3], tree.predict_proba(test[:, :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()  # 显示作图结果
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 疑似用户的识别模型通常基于电力数据分析和建模技术,通过对电力数据的实时监测和分析,识别出可能存在的电行为。主要的方法包括: 1. 电力负荷分析:通过分析用户电力负荷变化,可以判断是否有电行为。例如,如果一个家庭在夜间的用电量明显增加,而且没有合理的解释,那么可能存在电行为。 2. 基于用电特征的模型:通过分析用户的用电特征,如有功功率、无功功率、功率因数等,结合用户的用电历史数据,可以建立电行为的识别模型。 3. 电能表数据分析:通过分析电能表的数据,如电流、电压、电能等,可以判断是否存在电行为。例如,如果一个家庭的电能表数据和用电量不符,那么就有可能存在电行为。 以上是一些常见的疑似用户的识别模型,但需要注意的是,这些模型并不能百分之百地准确识别电行为,仍需结合实际情况进行综合分析。 ### 回答2: 疑似用户的识别模型是一种通过数据分析与监测技术,准确判断是否存在电行为的模型。该模型通常由以下几个步骤构成: 第一步是数据采集与预处理。从电力系统中收集相关数据,如用户用电记录、用电设备信息、线损数据等。对采集到的数据进行预处理,提取有效特征并消除噪声。 第二步是特征工程。根据电行为的特征,构建适当的特征指标,如用户用电波动性、用电时间分布、实际用电量与计量表读数之间的差异等。通过特征工程,能够使模型更好地区分正常用电与电行为。 第三步是模型训练与优化。根据已标记的电样本与正常用户样本,利用机器学习或深度学习算法构建分类模型,并通过反复迭代优化模型的参数和结构,提高模型的准确度和鲁棒性。 第四步是模型测试与验证。使用测试数据对模型进行验证,评估模型的性能指标,如准确率、召回率、F1值等。同时,通过与监测数据的对比,验证模型的实际效果。 第五步是模型应用与监测。将训练好的模型部署到实际系统中,对用户用电数据进行监测与分析,实时判断是否存在电行为。一旦模型判断存在电行为,应及时采取相应措施进行确认和处理。 总之,疑似用户的识别模型是通过数据分析和监测技术,构建一套科学有效的算法模型来判断用户是否存在电行为。这种模型能够提高电力系统的安全性和准确性,为电力管理部门提供有效的决策依据。 ### 回答3: 疑似用户的识别模型主要是通过分析电力使用数据,结合多种评估指标和模式识别算法来判断用户是否存在电行为。下面是一个基本的疑似用户识别模型的简要描述。 首先,疑似用户识别模型会收集并分析用户电力使用数据。这些数据包括用户的用电量、用电时间、用电设备等信息。通过统计用户的用电习惯和用电模式,可以建立用户的基准用电模型。 接下来,识别模型通过比对用户实际用电数据与基准用电模型做对比分析。如果用户的实际用电数据与基准用电模型存在较大偏差,可能表明该用户存在电行为的可能性。例如,用户使用较多用电设备但实际用电量远低于基准用电模型,或者在非工作时间段有异常高的用电量等情况。 同时,模型也会结合其他评估指标进行综合判断。例如,用户所在区域的平均用电量、相邻用户的用电情况等。如果用户的用电情况明显偏离周围用户的用电特征,也可能表明该用户存在电行为的可能性。 最后,识别模型还可以通过模式识别算法对用户的用电行为进行分类和分群,进一步排查疑似用户。例如,通过聚类分析将用户划分为不同的用电群组,可以发现某些特定群组中的用户是否存在异常的用电行为。 总之,疑似用户的识别模型是基于电力使用数据的分析和模式识别算法,通过比对用户实际用电数据与基准用电模型、综合评估指标以及用电行为的分类分群等手段来判断用户是否存在电行为。该模型可以为电力部门提供辅助识别电行为的依据,提高电行为的发现率和处置效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值