異常檢測,以防止能量損失
能量損失的實用空間主要分為兩類:欺詐和泄漏。詐騙盜竊(或能量)是惡意和範圍可以從米篡改,利用相鄰的房屋,甚至商業運行負載住宅(如房屋)增長。計篡改是傳統上由人員做常規手工檢查,但更新的計算機視覺的發展允許使用激光雷達和無人機自動化這些檢查。
能量泄漏通常是認為物質泄漏,像破碎的管道,但可以包含許多問題更加突出。例如,一個窗口開在冬天會導致異常的能源使用在家裏由熱泵,或一個空間加熱器被不小心留在多天。每種情況下代表能量損失和應辦理相應的保護消費者免受成本上升和節約能源,但準確地識別能量損失時可以令人生畏的大規模人類第一的方法。本文的其餘部分將科學的方法利用機器學習方法在磚來解決這個問題的規模與開箱即用的分布式計算,內置的編排和端到端MLOps。
檢測大規模能量損失
最初的問題許多公用事業公司在努力發現能量損失是沒有準確地標記數據。因為依賴自我報告的客戶,一些問題出現。首先,消費者可能沒有意識到有一個泄漏。例如,氣體可能不夠突出的氣味從一個小泄漏或度假時門離開了。其次,對於欺詐沒有激勵過度使用情況的報告。很難挑出盜竊使用簡單聚合,因為天氣和家庭大小需要考慮驗證異常。最後,調查每一個所需的人力資源,其中許多是假警報,征稅的組織。為了克服這些障礙,公用事業公司可以利用數據采取科學方法和機器學習來檢測能量損失。
分階段能量損失檢測方法
如上所述,依賴自我報告的數據會導致不一致和不準確的結果,防止公用事業公司建立一個準確的監督模式。相反,應采取積極的數據的方法,而不是一個被動的“報告和調查”。這樣的數據的方法可以分成三個階段:不受監督,監督和維護。從一個無監督方法允許指出驗證生成標記數據集通過檢測異常沒有經過任何訓練數據。接下來,輸出的無監督步驟可以送入監督訓練步驟,使用帶安全標簽的數據來構建一個通用的和健壯的模型。自從在天然氣和電力的使用模式改變由於消費和盜竊模式,監督模型隨著時間的推移會變得不準確。為了解決這一問題,研究無監督模式繼續運行作為一個檢查監督模型。為了說明這一點,一個電表的數據集,其中包含每小時計讀數結合天氣數據將被用來構造一個粗略的框架做能量損失檢測。
無監督階段
這第一階段應該作為指導調查和驗證潛在損失,應該更準確比隨機檢查。這裏的主要目標是提供準確的輸入我們的監管階段,短期目標的降低獲取這個標簽數據的操作開銷。理想情況下,這個練習應該開始與人口的一個子集盡可能多的多樣性包括因素如家庭大小,樓層,年齡的家裏,和設備信息。盡管這些因素不會用作功能在這個階段,他們將是重要的在構建一個更加健壯的監督下一階段模型。
無監督的方法將使用技術的組合來識別異常在一米的水平。而不是依靠一個算法,它可以更強大的使用一個(或模型)的集合發展共識。有很多有用的預構建的模型和方程確定異常深度學習算法從簡單的統計數據。對於這個練習,選擇三種方法:隔離森林,局部離群值和z分數測量
的z分數方程是非常簡單的和非常輕量的計算。它隻需要一個值,減去平均所有的值,然後將它的標準差。在這種情況下,價值將為建築代表一個單一的儀表讀數,平均將建築的所有讀數的平均值,標準差和相同的。
z = (x -μ)/σ
如果分數高於三就被認為是異常。這可以高度準確的方式快速看到價值,但是這種方法本身不會考慮其他因素,如天氣和時間。
隔離森林(iForest)模型構建一個整體的孤立樹,異常點的最短遍曆路徑。
這種方法的好處是它可以多維數據,從而增加預測的準確性。這增加了開銷可以等同於在運行時作為簡單的z分數的兩倍。hyper-parameters很少,使調到最低。
當地的離群值因子(LOF)模型使用密度(或點)之間的距離的本地集群相比,其鄰國的密度來確定異常值。
LOF有相同的計算需要iForest但更健壯的檢測局部異常而不是全球異常。
這些算法的實現將規模集群上使用內置SQL函數z分數或熊貓UDF scikit-learn模型。每個模型將被應用在個人儀表水平占未知變量,比如主人的習慣。
z分數使用上麵介紹的公式,並將記錄標記為異常如果分數大於3。
選擇building_id,時間戳,meter_reading,(meter_reading- - - - - -avg_meter_reading)/std_dev_meter_reading作為meter_zscore從生
iForest和LOF都將使用相同的輸入,因為他們是多維模型。使用一些關鍵特性會產生最好的結果。在這個例子中,結構特點將被忽略,因為他們將是靜態的,對於一個給定的表。相反,重點是放在空氣溫度。
df = spark.sql (f”““選擇building_id,時間戳,meter_reading,ntile(200) /(分區通過building_id秩序air_temperature) air_temperature_ntile從【目錄】。【數據庫】.raw_featuresmeter_reading不是空在哪裏和時間戳< = {cutoff_time}””“)
這是分組並傳遞給熊貓UDF用於分布式處理。一些元數據列添加到結果表明模型使用和存儲唯一整體標識符。
結果=(df.groupBy (“building_id”).applyInPandas (train_model模式=“building_id int,時間戳的時間戳,異常int,分數雙”).withColumn (“model_name”,點燃(“local_outlier_factor”)).withColumn (“prediction_time”,current_timestamp()).withColumn (“ensemble_id”,點燃(ensemble_id)))
三種模式可以使用磚並行運行工作流。任務值是用於生成共享整體標識符,以便達成共識從相同的工作流運行查詢數據。一步的共識將做一個簡單多數投票支持三種模式來確定是否它是一個異常。
模型應該在每天(或者每小時)的時間間隔運行之前識別出潛在的能量損失,以驗證這個問題消失或被遺忘的客戶(例如:上周我不記得留了一扇窗戶)如果可能的話,應該調查所有異常,甚至正常的隨機或半隨機集值應定期進行檢查,以確保異常通過裂縫沒有下滑。一旦發生了幾個月的迭代,可以輸入正確標記數據的監督模型的訓練。
監督階段
在前一節中,一個無監督的方法被用來精確標簽異常檢測潛在的泄漏或盜竊的好處一天幾次。監督階段將使用這個新標簽的數據結合特性像家一樣的大小,數量的地板,年齡的,設備信息,構建一個通用模型,可以主動檢測異常攝取。當處理大容量的數據,包括幾年的曆史工具使用一個詳細的級別,標準的ML技術可以成為不如期望的性能。在這種情況下,火花毫升圖書館將利用火花的分布式處理。火花毫升是一個機器學習庫,它提供了一個高級別Dataframe-based API使ML火花可伸縮的和容易。它包括許多流行的算法和工具以及能力毫升工作流轉換成Pipelines-more在這一點。就目前而言,我們的目標是創建一個基線模型在我們帶安全標簽的數據時使用一個簡單的邏輯回歸模型。
首先,標簽數據集被加載到dataframe從三角洲表使用火花SQL。
df = spark.sql (f”““select * from目錄(數據庫)。table_with_labels meter_reading不是空””“)
似乎是異常的比例記錄以來明顯不平衡,平衡的數據集是由多數類的一個示例並加入到整個少數民族(異常)使用PySpark DataFrame。
從pyspark.sql。功能導入坳major_df=df.filter(坳(“異常”)==0)minor_df=df.filter(坳(“異常”)==1)比=int(major_df。數()/minor_df。數())sampled_majority_df=major_df.sample (假,1/比,種子=12345年)rebalanced_df=sampled_majority_df.unionAll (minor_df)
刪除一些不必要的列後,新的平衡DataFrame分為訓練和測試數據集。在這一點上,管道可以使用管道用SparkML API,類似於scikit-learn管道的概念。管道由一係列的階段按順序運行,改變輸入DataFrame在每個階段。
管道在訓練步驟中,將包括四個階段:一個字符串索引器和一個炎熱的編碼器用於處理分類變量,一個向量彙編所需創建一個單一的數組列組成的所有功能,和交叉驗證。從這一點上,管道可以適用於訓練數據集。
階段= [string_indexer ohe_encoder vec_assembler,簡曆)管道管道= =階段(階段)pipeline_model = pipeline.fit (train_df)
然後,測試數據集可以通過新的模型管道的準確性。
pred_df = pipeline_model.transform (test_df)
結果指標可以計算這個基本LogisticRegression估計量。
ROC曲線下麵積:0.80F1得分:0.73
一個簡單的改變估計在交叉驗證步驟將允許用於評估不同的學習算法。在測試三種不同的估計(LogisticRegression RandomForestClassifier, GBTClassifier)是決定GBTClassifier導致精度略好。
不壞,因為一些非常基本的代碼優化和定製。提高模型精度和productionalize管道可靠毫升、額外措施,如增強的特征選擇,hyperparameter調優,並添加explainability可以添加細節。
維護層
隨著時間的推移,新的場景和環境造成能量損失會發生監管模式並沒有改變之前,在天氣模式,設備升級,房屋所有權,和欺詐行為。考慮到這一點,應該實現混合方法。高度準確的監督模型可以用來預測已知場景與無監督並行。高度自信的預測無監督合奏可以用來覆蓋監督決定提升潛在異常邊緣(看不見的)場景。在驗證,結果可以反饋到係統部門和監督模型的擴張。利用建立在磚的編排能力,這個解決方案可以有效地部署實時數據異常的預測以及離線檢查與無監督模式。
結論
防止能量損失是一個具有挑戰性的問題,需要在大規模檢測異常的能力。傳統上它是一個非常難以解決的問題,因為它需要一個大領域行動調查來補充一個非常小的和經常inaccurately-reported數據集。采取科學的方法進行調查使用無監督技術大大減少了所需的人力開發一個最初的訓練數據集,大大降低進入開發更精確的監督模型,定義適合人口。磚提供了內置的編排的總體模型和分布式模型的訓練必要的功能,消除傳統限製輸入數據大小和啟用完整的大規模機器學習生命周期。