拓端數據|Python中用Prophet模型對天氣時間序列進行預測與異常檢測


原文鏈接:http://tecdat.cn/?p=22673 

原文出處:拓端數據部落公眾號

 

方法

Prophet異常檢測使用了Prophet時間序列預測。基本的Prophet模型是一個可分解的單變量時間序列模型,結合了趨勢、季節性和節假日效應。該模型預測還包括一個圍繞估計的趨勢部分的不確定性區間。另外,完全的貝葉斯推斷也可以以增加計算量為代價。然后,不確定性區間的上限和下限值可以作為每個時間點的離群點閾值。首先,計算從觀測值到最近的不確定度邊界(上限或下限)的距離。如果觀察值在邊界內,離群點得分等於負距離。因此,當觀測值與模型預測值相等時,離群點得分最低。如果觀察值在邊界之外,得分等於距離測量,觀察值被標記為離群點。然而,該方法的一個主要缺點是,當新的數據進來時,你需要重新調整模型。這對於具有實時檢測的應用來說是不可取的。

數據集

這個例子使用了地球化學研究所記錄的天氣時間序列數據集。該數據集包含14個不同的特征,如空氣溫度、大氣壓力和濕度。這些都是在2003年開始,每10分鍾收集一次。我們只使用2009年至2016年期間收集的數據。

  1.  
    import matplotlib.pyplot as plt
  2.  
    import numpy as np
  3.  
    import os
  4.  
    import pandas as pd
  5.  
    import tensorflow as tf

加載數據集

  1.  
     
  2.  
    df = pd.read_csv(csv_path)
  3.  
    df['Date Time'] = pd.to_datetime(df['Date Time'], format='%d.%m.%Y %H:%M:%S')
  4.  
    df.head()

 選擇子集來測試Prophet模型。

 

 
n_prophet = 10000

Prophet模型需要得到一個有兩列的DataFrame:一列名為ds,包含時間戳,一列名為y,包含要評估的時間序列。我們只看溫度數據。

  1.  
    print(df_T.shape)
  2.  
    df_T.head()

plt.plot(df_T['ds'], df_T['y'])

 

加載或定義離群檢測

你可以將預訓練的模型保存在本地目錄的文件路徑中,並加載檢測模型。或者,你也可以從頭開始訓練一個檢測模型。

  1.  
    filepath = 'my_path' # 改為下載模型的目錄
  2.  
    if outlier_detector: # 加載預訓練的離群檢測器
  3.  
    filepath = os.path.join(filepath, detector_name)
  4.  
    else: # 初始化、擬合並保存離群檢測
  5.  
    od.fit(df_T)

請查看文檔以及原始的Prophet文檔,了解如何定制基於Prophet的異常值檢測器,並添加季節性因素、假期、選擇飽和邏輯增長模型或應用參數正則化。

預測測試數據中的異常值

定義測試數據。重要的是,測試數據的時間與訓練數據一致。下面我們通過比較測試數據框的前幾行和訓練數據框的最后幾行來檢查這一點。

  1.  
     
  2.  
    df_T_test = pd.DataFrame(data=d)

 

df_T.tail()

 

預測測試數據的異常值。

  1.  
    predict(
  2.  
    df_T_test
  3.  
    )

結果可視化

我們可以用Prophet將我們的預測結果可視化。包括歷史預測。

  1.  
     
  2.  
    model.predict(future)
  3.  
    model.plot(forecast)

 

我們還可以繪制預測中不同成分的細分。預測的不確定性區間是由外推趨勢的MAP估計值決定的。

plot_component(forecast)

 

很明顯,我們對未來的預測越遠,決定離群值閾值的不確定性區間就越大。

讓我們把實際數據與離群點閾值的上限和下限預測值疊加起來,檢查我們預測的離群點在哪里。 

plot(x='ds', y=['y', 'yhat', 'yhat_upper', 'yhat_lower'])
 

 

異常點的得分和預測。

  1.  
    np.zeros(n_periods)
  2.  
    plot(x='ds', y=['score', 'threshold'])

 

 

當我們進一步預測未來時,隨着不確定性的增加,離群點的分數自然呈下降趨勢。

讓我們來看看一些個別的離群值。

  1.  
    outlier = fcst.loc[fcst['score'] > 0]
  2.  
    print((outlier.shape[0]))

 


最受歡迎的見解

1.在python中使用lstm和pytorch進行時間序列預測

2.python中利用長短期記憶模型lstm進行時間序列預測分析

3.使用r語言進行時間序列(arima,指數平滑)分析

4.r語言多元copula-garch-模型時間序列預測

5.r語言copulas和金融時間序列案例

6.使用r語言隨機波動模型sv處理時間序列中的隨機波動

7.r語言時間序列tar閾值自回歸模型

8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類

9.python3用arima模型進行時間序列預測


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM