国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于Python的時間序列異常值檢測

這篇具有很好參考價值的文章主要介紹了基于Python的時間序列異常值檢測。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基于Python的時間序列異常值檢測?

今天我們介紹一下使用python做時間序列數(shù)據(jù)分析和預測中異常值檢測的方法,常用的異常值檢測方法有以下幾種:

  • 3sigma: 基于正太分布,當數(shù)據(jù)值超過±3個標準差(3sigma)時為異常值。
  • z-score : z標準分數(shù),它測量數(shù)據(jù)值到平均值的距離,當數(shù)據(jù)與平均值相差2個標準差時z-score為2,如果將z-score為3作為異常值判斷標準時,便相當于3sigma。
  • 箱體法(box): 它基于數(shù)據(jù)的四分位值來判斷異常值。
  • 多維度異常值判斷法,通過數(shù)據(jù)特征的多個維度綜合判斷數(shù)據(jù)是否為異常值。

注:3sigma,z-score,箱體法(box)都是從數(shù)據(jù)值本身的單一維度去分析和判斷異常值,從而有一定的局限性, 然而多維度異常值判斷法更注重從數(shù)據(jù)特征的各個維度去分析和判斷異常值,顯然多維度異常值判斷法更為科學和精準。

導入時間序列數(shù)據(jù)

我們的數(shù)據(jù)來自于某商業(yè)零售門店的每日客流量數(shù)據(jù),客流量數(shù)據(jù)直接關系到門店銷售業(yè)績,所以有必要對客流量數(shù)據(jù)進行分析。

基于Python的時間序列異常值檢測

數(shù)據(jù)中的 y 列代表了客流量,這里數(shù)據(jù)的時間范圍為2020.1至2023.1 ,接下來我們查看數(shù)據(jù)的趨勢圖。

plt.figure(figsize=(10,4),dpi=100)
plt.plot(df)
plt.title("客流量趨勢")
plt.show()

?基于Python的時間序列異常值檢測

?下面我們查看客流量數(shù)據(jù)的熱力圖分布:

calplot.calplot(df.y,suptitle='客流量分布',cmap='YlGn');

基于Python的時間序列異常值檢測

?從熱力圖的顏色深淺變化,我們也能發(fā)現(xiàn)客流量逐年在減少,這可能和疫情持續(xù)有關。

3sigma

依據(jù)正太分布異常值分布在3個標準差以外的位置,如下圖所示:

基于Python的時間序列異常值檢測

下面我們來計算數(shù)據(jù)的±3個標準以外的位置,落在這兩個位置內的數(shù)據(jù)點即為異常值:

# 3sigma
def three_sigma(df):
    mean=df.y.mean()
    std=df.y.std()
    upper_limit=mean+3*std
    lower_limit=mean-3*std
    df['anomaly']=df.y.apply(lambda x: 1 if (x>upper_limit )
                              or (x<lower_limit) else 0)
    return df
df1 = three_sigma(df.copy())
df1[df1.anomaly==1]

基于Python的時間序列異常值檢測

fig, ax = plt.subplots(figsize=(10,4))
a = df1.loc[df1['anomaly'] == 1, ['y']] #anomaly
ax.plot(df.index, df['y'], color='blue', label='正常值')
ax.scatter(a.index,a['y'], color='red', label='異常值')
plt.title(f'3sigma')
plt.xlabel('date')
plt.ylabel('y')
plt.legend()
plt.show();

基于Python的時間序列異常值檢測

?z-score

z-score測量數(shù)據(jù)值到平均值的距離,異常值的判斷依據(jù)為給定的距離閾值,一般情況下閾值可以設置在大于2個標準差的任意位置(依據(jù)業(yè)務和經驗來確定閾值)。如果將z-score為3作為異常值判定的閾值時,便相當于3sigma。

基于Python的時間序列異常值檢測

?文章來源地址http://www.zghlxwxcb.cn/news/detail-423238.html

# Z-Score
def z_score(df,threshold):
    mean=df.y.mean()
    std=df.y.std()
    df['z_score']=df.y.apply(lambda x:abs(x-mean)/std)
    df['anomaly']=df.z_score.apply(lambda x: 1 if x>threshold else 0)
    return df

#設置閾值為2或3,當閾值為3時便相當于3sigma
threshold=2
df2 = z_score(df.copy(),threshold)
df2[df2.anomaly==1]

基于Python的時間序列異常值檢測

fig, ax = plt.subplots(figsize=(10,4))
a = df2.loc[df2['anomaly'] == 1, ['y']] 
ax.plot(df.index, df['y'], color='blue', label='正常值')
ax.scatter(a.index,a['y'], color='red', label='異常值')
plt.title(f'Z-score, {threshold=}')
plt.xlabel('date')
plt.ylabel('y')
plt.legend()
plt.show();

箱體法(box)

?箱體法(box)基于數(shù)據(jù)的四分位值來判斷異常值。異常值>Q3+1.5*IQR 或者?異常值<Q1-1.5*IQR

基于Python的時間序列異常值檢測

def box_plot(df):
    q1=np.nanpercentile(df.y,25)
    q3=np.nanpercentile(df.y,75)
    iqr=q3-q1
    lower_limit=q1-1.5*iqr
    upper_limit=q3+1.5*iqr
    df['anomaly']=df.y.apply(lambda x: 1 if x<lower_limit or x>upper_limit  
                             else 0)
    return df
df3 = box_plot(df.copy())
df3[df3.anomaly==1]

基于Python的時間序列異常值檢測

fig, ax = plt.subplots(figsize=(10,4))
a = df3.loc[df3['anomaly'] == 1, ['y']] 
ax.plot(df.index, df['y'], color='blue', label='正常值')
ax.scatter(a.index,a['y'], color='red', label='異常值')
plt.title(f'Box-plot')
plt.xlabel('date')
plt.ylabel('y')
plt.legend()
plt.show();

基于Python的時間序列異常值檢測

?多維度異常檢測法PyOD

異常檢測算法工具庫(PyOD) 可以從數(shù)據(jù)的多個特征維度來檢測異常值,所以我們可以將時間序列數(shù)據(jù)的日期特征分解成多個和時間相關的其它特征,同時我們還需要設置一個異常值比例,一般情況下我們設置異常值比例在5%以下。這里我們使用的是Pycaret的異常值檢測模型,該模型是對PyOD進行了再次包裝,使之調用更為簡單,感興趣的朋友可以去查看Pycaret和PyOD的相關文檔。這里我們首先將日期字段進行分解,從原始的日期字段中我們可以拆分出年,月,日,星期,季度等和時間相關的特征:

from pycaret.anomaly import AnomalyExperiment
# 分解日期特征
def create_features(df):        
    df['year'] = df.index.year #年 
    df['month'] = df.index.month #月
    df['dayofmonth'] = df.index.day #日
    df['dayofweek'] = df.index.dayofweek #星期
    df['quarter'] = df.index.quarter #季度
    df['weekend'] = df.dayofweek.apply(lambda x: 1 if x > 5 else 0) #是否周末
    df['dayofyear'] = df.index.dayofyear   #年中第幾天
    df['weekofyear'] = df.index.weekofyear #年中第幾月
    df['is_month_start']=df.index.is_month_start
    df['is_month_end']=df.index.is_month_end
    return df
#創(chuàng)建特征
df4 = create_features(df.copy())
df4

基于Python的時間序列異常值檢測

?接下來我們使用Pycaret的anomaly模型對新數(shù)據(jù)集進行建模和預測,同時我們仍然需要設置一個異常值比例的閾值fraction:

#異常值算法:'knn','cluster','iforest','svm'等。
alg='knn'#異常值算法
fraction=0.02 #異常值比例 0.02,0.03,0.04,0.05
#創(chuàng)建異常值模型
exp = AnomalyExperiment()
r = exp.setup(df4.copy(), session_id = 123,verbose=False)
model = exp.create_model(alg, fraction=fraction,verbose=False)
model_results = exp.assign_model(model,verbose=False)
#獲取檢測結果
df5 = pd.merge(df.reset_index(),model_results[['Anomaly']],
               left_index=True, right_index=True)
df5.set_index('date',inplace=True)

fig, ax = plt.subplots(figsize=(10,4))
a = df5.loc[df5['Anomaly'] == 1, ['y']] 
ax.plot(df5.index, df5['y'], color='blue', label='正常值')
ax.scatter(a.index,a['y'], color='red', label='異常值')
plt.title(f'Pycaret.anomaly {fraction=}')
plt.xlabel('date')
plt.ylabel('y')
plt.legend()
plt.show();

基于Python的時間序列異常值檢測

?基于Python的時間序列異常值檢測

?基于Python的時間序列異常值檢測

?基于Python的時間序列異常值檢測

?這里我們還有多種異常值算法可以選擇,有興趣的朋友可以自己去嘗試不同的異常值算法:

基于Python的時間序列異常值檢測

?總結

今天我們介紹幾種常用的異常值檢測方法,其中3sigma,z-score,箱體法(box)都是從數(shù)據(jù)值本身的單一維度去分析和判斷異常值,從而有一定的局限性, 而多維度異常值判斷法更注重從數(shù)據(jù)特征的各個維度去分析和判斷異常值,顯然多維度異常值判斷法更為科學和精準。

參考資料

Pycaret 文檔

PyOD文檔

?

到了這里,關于基于Python的時間序列異常值檢測的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【閱讀論文】USAD:多變量時間序列上的無監(jiān)督異常檢測

    【閱讀論文】USAD:多變量時間序列上的無監(jiān)督異常檢測

    USAD : UnSupervised Anomaly Detection on Multivariate Time Series IT系統(tǒng)的自動監(jiān)控是Orange目前面臨的挑戰(zhàn)??紤]到其IT運營所達到的規(guī)模和復雜性,隨著時間的推移,用于推斷正常和異常行為的測量所需的傳感器數(shù)量急劇增加,使得傳統(tǒng)的基于專家的監(jiān)督方法變得緩慢或容易出錯。在本文中

    2024年02月12日
    瀏覽(23)
  • 融合transformer和對抗學習的多變量時間序列異常檢測算法TranAD論文和代碼解讀...

    融合transformer和對抗學習的多變量時間序列異常檢測算法TranAD論文和代碼解讀...

    今天的文章來自VLDB TranAD: Deep Transformer Networks for Anomaly Detection in Multivariate Time Series Data 論文鏈接:https://arxiv.org/pdf/2201.07284v6.pdf 代碼地址:https://github.com/imperial-qore/TranAD 在文章中提出了對于多變量異常檢測的幾個有挑戰(zhàn)性的問題 缺乏異常的label 大數(shù)據(jù)量 在現(xiàn)實應用中需要盡

    2023年04月09日
    瀏覽(20)
  • python:Pettitt突變檢測(以NDVI時間序列為例)

    python:Pettitt突變檢測(以NDVI時間序列為例)

    作者:CSDN @ _養(yǎng)樂多_ 本文將介紹標準正態(tài)同質性檢驗(Standard Normal Homogeneity Test,SNHT) 突變點檢測代碼。以 NDVI 時間序列為例。輸入數(shù)據(jù)可以是csv,一列NDVI值,一列時間。代碼可以擴展到遙感時間序列突變檢測(突變年份、突變幅度等)中。 結果如下圖所示, 一、準備數(shù)據(jù)

    2024年04月10日
    瀏覽(23)
  • [開源] 基于GRU的時間序列預測模型python代碼

    [開源] 基于GRU的時間序列預測模型python代碼

    基于GRU的時間序列預測模型python代碼分享給大家,記得點贊哦 更多時間序列預測代碼獲?。?時間序列預測算法全集合--深度學習

    2024年04月09日
    瀏覽(19)
  • Python數(shù)據(jù)分析案例42——基于Attention-BiGRU的時間序列數(shù)據(jù)預測

    Python數(shù)據(jù)分析案例42——基于Attention-BiGRU的時間序列數(shù)據(jù)預測

    承接上一篇的學術縫合,排列組合模型,本次繼續(xù)縫合模型演示。 Python數(shù)據(jù)分析案例41——基于CNN-BiLSTM的滬深300收盤價預測-CSDN博客 雖然我自己基于各種循環(huán)神經網(wǎng)絡做時間序列的預測已經做爛了.....但是還是會有很多剛讀研究生或者是別的領域過來的小白來問這些神經網(wǎng)絡

    2024年04月15日
    瀏覽(23)
  • 風速預測 | Python基于CEEMDAN-CNN-Transformer+ARIMA的風速時間序列預測

    風速預測 | Python基于CEEMDAN-CNN-Transformer+ARIMA的風速時間序列預測

    效果一覽 基本介紹 CEEMDAN-CNN-Transformer+ARIMA是一種用于風速時間序列預測的模型,結合了不同的技術和算法。收集風速時間序列數(shù)據(jù),并確保數(shù)據(jù)的質量和完整性。這些數(shù)據(jù)通常包括風速的觀測值和時間戳。CEEMDAN分解:使用集合經驗模態(tài)分解(CEEMDAN)將風速時間序列分解為多

    2024年01月25日
    瀏覽(26)
  • 時間序列之拐點檢測(changepoints detection)算法

    時間序列之拐點檢測(changepoints detection)算法

    對于時間拐點問題,其實就是找changepoint的問題,業(yè)務場景比如機器的縮擴容,業(yè)務的升級回滾等,都會讓一些指標發(fā)生這樣的現(xiàn)象, 如下圖。(這種場景比較理想,現(xiàn)實情況要復雜得多) 為了檢測這個區(qū)域,需要使用changepoint detector:ruptures ruptures 是專門用于檢測時間序列數(shù)

    2024年02月20日
    瀏覽(24)
  • 金融時間序列分析:Python基于garch模型預測上證指數(shù)波動率、計算var和var穿透率、雙尾檢驗

    金融時間序列分析:Python基于garch模型預測上證指數(shù)波動率、計算var和var穿透率、雙尾檢驗

    目錄 一、收益率波動效應的分析 1.1 ?收益率序列平穩(wěn)性檢驗 1.2 建立AR(p)模型 1.3 Ljung-Box混成檢驗殘差序列的相關性,判斷是否有ARCH效應 1.4 建立ARCH模型 ?二、GARCH模型與波動率預測 2.1 建立GARCH模型 2.2 波動率預測 三、正態(tài)分布的假設下通過波動率計算VaR ?四、厚尾分布的假

    2024年02月04日
    瀏覽(32)
  • 時間序列分析——基于R | 第2章 時間序列的預處理習題代碼

    時間序列分析——基于R | 第2章 時間序列的預處理習題代碼

    1.1判斷該序列是否平穩(wěn) 1.2樣本自相關系數(shù) 1.3序列自相關圖 2.1繪制時序圖,判斷平穩(wěn)性 從時序圖中可以看出,該序列存在較明顯的季節(jié)性,同時也存在一定的趨勢性。 2.2計算樣本自相關系數(shù) 2.3繪制自相關圖 從自相關圖中可以看出,該序列存在較強的季節(jié)性和自相關性,不具

    2023年04月18日
    瀏覽(27)
  • 【ARMA時間序列分析】基于matlab ARMA時間序列分析【含Matlab源碼 2430期】

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包