日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

趋势预测算法大PK!

發(fā)布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 趋势预测算法大PK! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/106368395

趨勢預(yù)測在很多應(yīng)用場景中都會起到至關(guān)重要的作用,比如淘寶商家會考慮庫存量應(yīng)該保持在多少才能夠滿足客戶需求,商場希望得知假期會迎來多大的客流量以安排系列活動,機(jī)場想要預(yù)測五一黃金周會有多大的客運量來做相應(yīng)的應(yīng)急部署等。在智能運維領(lǐng)域,趨勢預(yù)測同樣具有一定的理論意義和實際應(yīng)用價值。

趨勢預(yù)測在運維場景中的應(yīng)用背景

在實時監(jiān)控系統(tǒng)中會采集到大量的數(shù)據(jù),有些數(shù)據(jù)具有周期性等時間特征,也稱之為時間序列。如果能挖掘出時間序列中所蘊(yùn)含的信息,實現(xiàn)輔助人工決策,甚至是自動決策,都會為運維工作帶來事半功倍的效果。

比如KPI異常檢測可以衡量服務(wù)的健康程度,分析出CPU、交易量、響應(yīng)時間等指標(biāo)的歷史規(guī)律后,設(shè)置動態(tài)閾值,得到更加準(zhǔn)確的異常報警,減少漏報誤報情況的發(fā)生,提高應(yīng)急響應(yīng)效率;通過對歷史事件單的分析,預(yù)測出下次系統(tǒng)告警可能發(fā)生的時間或者指定時間內(nèi)可能發(fā)生告警的系統(tǒng)等,就可以根據(jù)分析結(jié)果做出相應(yīng)的響應(yīng)措施,為后續(xù)運維工作帶來極大的指導(dǎo)意義。類似這樣的應(yīng)用場景還有很多,如何充分挖掘出時間序列中所蘊(yùn)含的信息,成為智能運維領(lǐng)域研究中的一大熱點。

那么時間序列一般會有哪些比較明顯的特征呢?

一般來講具有趨勢性、季節(jié)性、周期性隨機(jī)性四種特征。但是對于時間序列預(yù)測,想要找到一個適用所有場景的通用模型幾乎是不可能的,因為現(xiàn)實中每個預(yù)測問題的背景不同,影響預(yù)測值的因素與程度也往往不同,針對不同的問題就要采用不同的方法和模型進(jìn)行統(tǒng)計分析,這都會給建模人員和數(shù)據(jù)分析師帶來極大的難度,也使得時間序列預(yù)測問題變得復(fù)雜。

不同的模型會有各自的優(yōu)勢和劣勢,本文將對傳統(tǒng)時間序列預(yù)測模型ARIMA、經(jīng)典神經(jīng)網(wǎng)絡(luò)模型LSTM以及Prophet模型展開具體介紹,并在事件單數(shù)據(jù)集上做了初步的探索。

常用的趨勢預(yù)測算法

2.1、ARIMA模型

ARIMA模型,全稱為自回歸積分滑動平均模型(Autoregressive Integrated Moving Average Model),是由博克思(Box)和詹金斯(Jenkins)于20世紀(jì)70年代初提出的一種時間序列預(yù)測方法。ARIMA模型并不是一個特定的模型,而是一類模型的總稱。通常用p,d,q值來確定,記做ARIMA(p,d,q)。其中p代表自回歸模型階數(shù),d代表差分階數(shù),q代表移動平均階數(shù)。

ARIMA模型的建模步驟如下:

首先對時間序列數(shù)據(jù)進(jìn)行平穩(wěn)性檢測,若不通過,則采取對數(shù)、差分等相應(yīng)的變換將其變?yōu)槠椒€(wěn)序列。通過平穩(wěn)性檢測之后,進(jìn)行白噪聲檢測,當(dāng)序列不是白噪聲序列時,即可選擇合適的ARIMA模型進(jìn)行擬合。如果誤差值通過白噪聲檢測,就可以采用擬合出的模型對時序數(shù)據(jù)進(jìn)行預(yù)測了。

雖然ARIMA模型已經(jīng)在很多個場景中得以應(yīng)用,但是它存在的缺陷是不可忽視的:要求時序數(shù)據(jù)具有穩(wěn)定性,或者通過差分化后是穩(wěn)定的;對于數(shù)據(jù)中存在缺失值的情況,需要先進(jìn)行缺失值填補(bǔ),這很大程度上損害了數(shù)據(jù)的可靠性。

2.2 神經(jīng)網(wǎng)絡(luò)模型

2.2.1 網(wǎng)絡(luò)模型初探

在人工智能領(lǐng)域,DNN(Deep Neural Networks,深度神經(jīng)網(wǎng)絡(luò))的應(yīng)用極其廣泛,在圖像分類、目標(biāo)檢測等領(lǐng)域已經(jīng)取得了優(yōu)異的成績。但是在DNN中,當(dāng)前網(wǎng)絡(luò)層只和上一層神經(jīng)網(wǎng)絡(luò)有連接,沒有考慮樣本出現(xiàn)的時間順序,只能進(jìn)行逐層進(jìn)行訓(xùn)練。

為了將時間因素包含在內(nèi),出現(xiàn)了RNN(循環(huán)神經(jīng)網(wǎng)絡(luò)模型),可以將神經(jīng)元的輸出在下一個時間戳直接作用到自身。具體來講,就是在t時刻接收到輸入之后,隱藏層的值是,輸出值是。關(guān)鍵點在于,的值不僅僅取決于,還取決于,也就是說當(dāng)前層的輸出值不僅與當(dāng)前時間點的輸入有關(guān),還要結(jié)合上一個時間點的輸出值共同參與模型的訓(xùn)練。這樣RNN就成為了一個在時間上傳遞的神經(jīng)網(wǎng)絡(luò)了。

但RNN也存在一定的弊端,RNN只能夠接受上一個節(jié)點的輸出,隨著網(wǎng)絡(luò)層次的加深,可能會發(fā)生梯度消失或者梯度爆炸,通俗來講,就是當(dāng)前節(jié)點無法對距離自己較遠(yuǎn)節(jié)點的信息進(jìn)行“記憶”。為了解決該問題,研究人員提出了很多解決辦法,其中最為經(jīng)典的一個網(wǎng)絡(luò)模型是長短時間記憶模型(Long Short-Term Memory,LSTM)。

LSTM與RNN主要的區(qū)別在于,它在模型中加入了一個判斷信息是否有用的“處理器”,這個處理器被稱為“記憶單元”(Memory Cell)。在一個Cell中放置了三扇門,分別是輸入門、遺忘門和輸出門。也就是說,當(dāng)一個信息進(jìn)入到LSTM中后,可以根據(jù)規(guī)則來判斷其是否有用,只有符合要求的信息才會被留下,不符合的信息會被直接“遺忘”。這樣序列數(shù)據(jù)在訓(xùn)練過程中的“記憶”問題就迎刃而解了。

采用神經(jīng)網(wǎng)絡(luò)的方法雖然能夠達(dá)到較好的效果,但是模型不夠靈活,很難讓使用者引入問題的背景知識,或者一些有用的假設(shè);訓(xùn)練模型還需要大量的數(shù)據(jù),數(shù)量不夠多很可能會產(chǎn)生過擬合,影響訓(xùn)練效果;除此之外,LSTM是單步預(yù)測,只能預(yù)測出下一個時間點的值,對于未來任意時間段的預(yù)測很不友好。

2.3 Prophet模型

facebook發(fā)布了prophet(“先知”)項目,它以更簡單、靈活的預(yù)測方式獲得與經(jīng)驗豐富的分析師相媲美的預(yù)測結(jié)果。Prophet是Facebook發(fā)布的基于可分解(趨勢+季節(jié)+節(jié)假日)模型的開源庫。它讓我們可以用更加簡單、直觀的參數(shù)進(jìn)行高精度的時間序列預(yù)測,并且支持自定義季節(jié)和節(jié)假日因素的影響。

prophet的整體框架分為四部分:Modeling、Forecast Evaluation、Surface Problems以及Visually Inspect Forecasts。從整體上看,這是一個循環(huán)結(jié)構(gòu),而這個結(jié)構(gòu)又可以根據(jù)虛線分為分析師操縱部分與自動化部分。因此,整個過程就是分析師與自動化過程相結(jié)合的循環(huán)體系,也是一種將問題背景知識與統(tǒng)計分析融合起來的過程,這種結(jié)合大大的增加了模型的適用范圍,提高了模型的準(zhǔn)確性。

首先Modeling:建立時間序列模型;然后進(jìn)行Forecast Evaluation,也就時模型評估,對參數(shù)進(jìn)行多種嘗試,根據(jù)仿真效果評估出更加合適的模型;接著是Surface Problems:呈現(xiàn)問題,將誤差較大的潛在原因呈現(xiàn)給分析師進(jìn)行人工干預(yù);最后一部分是Visually Inspect Forecasts:以可視化的方式反饋整個預(yù)測結(jié)果,將問題反饋給分析師后,由分析師考慮是否進(jìn)一步調(diào)整和構(gòu)建模型。

針對不同的應(yīng)用場景,Prophet也有相應(yīng)的模型:

  • 增長趨勢的模型:有幾個月(最好是一年)的每小時、每天或每周觀察的歷史數(shù)據(jù);

  • 季節(jié)趨勢的模型(seasonality模型):有較強(qiáng)的季節(jié)性趨勢;

  • 有事先知道的以不定期的間隔發(fā)生的重要節(jié)假日(holiday模型),比如國慶節(jié)等。

  • 整體來講,Prophet模型可以根據(jù)前一段時間的序列數(shù)據(jù),結(jié)合專家的經(jīng)驗,預(yù)測出期望時間段的輸出值,以較小的模型訓(xùn)練成本獲得較好的訓(xùn)練結(jié)果。

    趨勢預(yù)測算法小試牛刀

    3.1 數(shù)據(jù)采集

    本文采集了一些系統(tǒng)工單數(shù)據(jù),通過LSTM和prophet模型分別對系統(tǒng)產(chǎn)生的工單數(shù)量的趨勢進(jìn)行預(yù)測。

    首先對對提取到的數(shù)據(jù)進(jìn)行預(yù)處理,提取出時間(ds)和事件單數(shù)(y)兩列數(shù)據(jù),部分?jǐn)?shù)據(jù)可視化結(jié)果如下圖所示:

  • import?numpy?as?np

  • import?pandas?as?pd

  • #讀入數(shù)據(jù)

  • sales_df?=?pd.read_csv('false.csv')

  • sales_df.head()

  • 3.2 數(shù)據(jù)實驗

    1)LSTM模型構(gòu)建與實驗

    本文采用keras框架,構(gòu)建有一個LSTM和一個全連接層的網(wǎng)絡(luò),采用MSE損失函數(shù),用adam來優(yōu)化損失函數(shù),并將數(shù)據(jù)以7:3的比例劃分為訓(xùn)練集和測試集。具體代碼如下:

  • #?create?and?fit?the?LSTM?network

  • model?=?Sequential()

  • model.add(LSTM(4,?input_shape=(1,?look_back)))

  • model.add(Dense(1))

  • model.compile(loss='mean_squared_error',?optimizer='adam')

  • model.fit(trainX,?trainY,?epochs=240,?batch_size=1,?verbose=2)

  • 在數(shù)據(jù)集上的實驗結(jié)果如下圖所示,左圖展現(xiàn)了LSTM模型在數(shù)據(jù)集上的擬合情況,橫軸為時間,縱軸為事件單數(shù),黃色線為真實值,綠色實現(xiàn)代表訓(xùn)練集上的預(yù)測結(jié)果,綠色虛線表示測試集上的結(jié)果。可以看到模型基本可以擬合出變化趨勢,但是在具體的數(shù)量預(yù)測還有改進(jìn)的空間。右圖展現(xiàn)了在驗證集和測試集上的loss趨勢圖。

    2)Prophet模型構(gòu)建與實驗

  • from?fbprophet?import?Prophet

  • ?
  • ##?擬合模型

  • m?=?Prophet()

  • m.fit(sales_df)

  • #?#?構(gòu)建待預(yù)測日期數(shù)據(jù)框,periods?=?10?代表除歷史數(shù)據(jù)的日期外再往后推?10?天

  • future?=?m.make_future_dataframe(periods=10)

  • #?預(yù)測數(shù)據(jù)集

  • forecast?=?m.predict(future)

  • forecast[['ds',?'yhat',?'yhat_lower',?'yhat_upper']].tail()

  • ?
  • 通過fit()方法擬合Prophet()模型,make_future_dataframe()可以對未來日期的數(shù)據(jù)趨勢進(jìn)行預(yù)測,periods = 10 代表預(yù)測10天的結(jié)果,并計算出預(yù)測值(yhat),預(yù)測最小值(yhat_lower),預(yù)測最大值(yhat_upper)。具體趨勢預(yù)測圖如曲線圖所示,黑點代表真實值,淺藍(lán)色部分代表預(yù)測區(qū)間,可以看到模型基本可以擬合出較好的時間預(yù)測效果。

    還能夠通過plot_components(forecast)方法預(yù)測出數(shù)據(jù)的整體趨勢和周效應(yīng):

    趨勢--整體趨勢:

    趨勢--周效應(yīng):

    除了預(yù)測每天產(chǎn)生的工單數(shù)量,本文還對某些系統(tǒng)每天發(fā)生的工單數(shù)進(jìn)行了分析和預(yù)測,希望能夠在預(yù)測的基礎(chǔ)上,我們可以根據(jù)工單的預(yù)測數(shù)輔助運維工作的安排和開展。如某系統(tǒng)產(chǎn)生的工單數(shù)如下圖:

    小結(jié)

    趨勢預(yù)測算法在眾多場景中都有重要的應(yīng)用價值。本文對比較主流的ARIMA模型、LSTM神經(jīng)網(wǎng)絡(luò)模型和facebook發(fā)布的Prophet模型進(jìn)行介紹,并在系統(tǒng)工單數(shù)據(jù)集上進(jìn)行了初步探索。

    雖然由于數(shù)據(jù)量的原因以及模型調(diào)參上還沒有達(dá)到最佳的訓(xùn)練結(jié)果,但是模型對于趨勢預(yù)測的有效性已經(jīng)初步展現(xiàn)。之后,還會對趨勢預(yù)測算法作進(jìn)一步的探索和更深層次的研究,相信趨勢預(yù)測算法在智能運維領(lǐng)域的應(yīng)用也會更加廣泛和可靠。

    總結(jié)

    以上是生活随笔為你收集整理的趋势预测算法大PK!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。