1. 程式人生 > >第10章 家用電器使用者行為分析與事件識別

第10章 家用電器使用者行為分析與事件識別

本案例又是一個LM模型的應用。不過比較精彩的部分是時間序列資料的處理操作,進行的資料規約和特徵提取部分。書中的程式碼除了貫序模型中一個錯誤外,其他並沒有發現錯誤。不過因為本身對於時間序列的操作不是太熟悉,所以基本上就是跟著書中的程式碼走了一遍。

  1. 挖掘目標
    1.1 根據熱水器採集到的資料,劃分一次完整的用水事件。
    1.2 在劃分好的一次完整的用水事件中,識別出洗浴事件。
  2. 分析方法和過程
    2.1 對熱水使用者的歷史用水資料進行選擇性抽取,構建專家樣本。
    2.2 對步驟1形成的資料集進行資料探索與預處理。包括探索用水時間時間間隔的分佈,規約冗餘屬性、識別用水資料的缺失值,並對缺失值進行處理,根據建模的需要進行屬性構造等。
    2.3 在步驟2的建模樣資料基礎上,建立洗浴事件識別模型,對洗浴事件識別模型進行分析評價。
    2.4 對步驟3形成的模型結果應用並對洗浴事件劃分進行優化。
    2.5 呼叫洗浴時間識別模型,對實時監控的熱水器流水資料進行洗浴時間自動識別。
  3. 資料預處理
    在資料預處理中,我認為書中的提供的資料和描述有所不同。
    在208頁中,第3行中:

資料規約:當熱水器“開關機狀態”為關且水流量為0是,說明熱水器不處於工作狀態,資料記錄可以規約掉。

而在water_heater.xls檔案中提供的資料,明顯是不滿足要求的。如下圖所示:
這裡寫圖片描述
資料的開始兩條就為開關機狀態為“關”且水流量為0的資料。明顯這個資料處理的部分是有問題的。
我根據文字部分要求,進行處理後,結果如下圖,很巧的是這個處理後的資料前50條狀態全部為關,而後50條狀態全部為開,所以我截取了中間一部分45至55條的資料做為演示:
這裡寫圖片描述

但是因為隨後有一步處理中,把所有的水流量為0的資料全部去除了,所以資料最終還是統一的。

隨後進行的是用水事件的劃分。主要是通過了Timedelta和diff的配合使用,對連續兩次中間差值大於4的部分進行劃分。
這裡寫圖片描述

用水事件閾值尋優模型是整個程式碼中我認為比較巧妙的地方。
不過比較有疑問的是以下程式碼:

if ts > threshold:
    ts = pd.Timedelta(minutes = 4)

為什麼當閾值大於專家閾值的時候,閾值是選擇4呢?我認為應該是選擇專家閾值的5啊。
不過好在這裡沒有發生這種情況,所以無論如何,不影響結果。
4. 模型構建
我仔細對照了書中的資料和後面提供的訓練樣本和測試樣本的模型,我認為兩組資料並非是同一來源的。而且訓練樣本的數量只有20幾條,實在也太少了點吧。
而且我在訓練過程中還發現了另外的問題,keras在第一次訓練時有時能產生正確結果,但是第二次訓練結果就會錯誤。我第一天晚上訓練出了一個和書上結果基本相似的結果,第二天重新進行訓練時,loss和acc始終保持不變,結果全部一致,不是全0就是全1。然後重啟電腦,結果又會發生變化,再次訓練,結果又錯誤。不知道其中原因在哪裡。所以,以下結果保持謹慎態度。

這裡寫圖片描述

模型構建部分基本和第6章是一樣的,沒有太多可以說的。而且結果本身也不令人滿意。

總結:相較於模型構建,本篇中特徵工程的時間序列操作才是重點。還需多多練習。