数据分析与挖掘实战-窃电漏电用户的发现
生活随笔
收集整理的這篇文章主要介紹了
数据分析与挖掘实战-窃电漏电用户的发现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
竊電漏電用戶的發現
-
背景
- 在研究這個項目之前我也在想,為什么這種領域需要數據挖掘?其實你若愿意去發現,你會發現,數據挖掘無處不在。
-
為什么選擇數據分析與挖掘技術?原因當然是之前處理方式的不合理。
方式不合理之處 定期巡檢、定期檢查電表、用戶舉報 對人的依賴太高,容錯率低 。 營銷稽查人員、用電檢查人員利用計量異常報警功能和電能量數據查詢功能開展在線監控,采集異常信息,建立數據分析模型 由于終端誤報,存在數據可靠性問題。 - 目前存在的分析模型,各輸入指標權重是由人定的,這是含有主觀臆斷的,存在明顯缺陷,實施效果不盡如人意。
- 目前的自動化系統可以采集相關信息,通過這些信息提取漏電用戶的特征,構建識別模型,就能做到自動檢查。
-
分析過程和方法
- 數據獲取
- 數據集已給出,很多時候分析人員拿到的不是數據集信息而是需要處理的原始數據如多個文檔、多個圖片,處理方法各不相同。
- 數據探索
- 分布分析(主要目的是篩選分析對象類別)
- 周期性分析(查看正常用戶和非正常用戶數據周期變化比對)
- 數據預處理
- 過濾不可能竊電用戶,剔除之
- 過濾特殊時間點數據(節假日,數據不合理是正常的)
- 缺失值處理,使用拉格朗日插值法插值(注意,這里直接刪除會造成周期性分析不合理)
- 數據挖掘建模
- 典型的給出特征和分類標簽,對新的數據特征進行分類(打標簽)
- 使用LM神經網絡和CART決策樹進行模型搭建
- 后續處理
- 根據用戶數據實時分析用戶特征,也就是模型的實際使用。
- 數據獲取
- 補充說明
- 使用兩種建模方式(LM神經網絡和CART決策樹)
- 本案例數據集已經相當合理,主要工作就是建模,不多贅述
- 參考書《Python數據分析與挖掘實戰》
?
# -*- coding: utf-8 -*- """ 使用LM神經網絡進行建模分析 """ import pandas as pd import matplotlib.pyplot as plt from random import shuffle from keras.models import Sequential from keras.layers.core import Dense, Activation from cm_plot import * from sklearn.metrics import roc_curve from sklearn.metrics import confusion_matrix from sklearn.model_selection import train_test_splitdef getDataSet(fileName):data = pd.read_excel(fileName)data = data.values# 隨機打亂shuffle(data)rawData = data[:, :3]rawLabel = data[:, 3]trainData, testData, trainLabel, testLabel = train_test_split(rawData, rawLabel, test_size=0.2)def modeling(trainData, trainLabel, testData, testLabel):'''構建LM神經網絡:return:'''netFile = 'net.model'net = Sequential()# 添加輸入層(3結點)到隱藏層(10結點)的連接net.add(Dense(input_dim=3, units=10))# 隱藏層使用relu激活函數net.add(Activation('relu'))# 添加隱藏層(10結點)到輸出層(1結點)的連接net.add(Dense(input_dim=10, units=1))# 輸出層使用sigmoid激活函數net.add(Activation('sigmoid'))net.compile(loss='binary_crossentropy', optimizer='adam')# 循環1000次訓練模型net.fit(trainData, trainLabel, epochs=1000, batch_size=1)# 本地化模型net.save_weights(netFile)# 訓練集數據回判# keras用predict給出預測概率,predict_classes才是給出預測類別,而且兩者的預測結果都是n*1維數組,而不是通常的1*nrst = net.predict_classes(trainData).reshape(len(trainData))# 輸出混淆矩陣cm = confusion_matrix(trainLabel, rst)print('訓練集混淆矩陣', cm)# 測試集預測rst_test = net.predict_classes(testData).reshape(len(testData))cm2 = confusion_matrix(testLabel, rst_test)print('測試集混淆矩陣', cm2)rst2 = net.predict(testData).reshape(len(testData))fpr, tpr, thresholds = roc_curve(testLabel, rst2, pos_label=1)#plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.plot(fpr, tpr, linewidth=2, label='ROC of LM')plt.title("LM神經網絡分類結果")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()modeling(trainData, trainLabel, testData, testLabel)if __name__ == '__main__':getDataSet('./data/model.xls')具體數據集和代碼可以看我的github。
?
總結
以上是生活随笔為你收集整理的数据分析与挖掘实战-窃电漏电用户的发现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-Logistic回归原理及实战
- 下一篇: 排序算法-01冒泡排序(Python实现