欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用Python進行時間序列分解和預測?

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)派THU-王闖 ? 作者:Mohit Sharma ? 2021-02-14 11:34 ? 次閱讀

預測是一件復雜的事情,在這方面做得好的企業(yè)會在同行業(yè)中出類拔萃。時間序列預測的需求不僅存在于各類業(yè)務場景當中,而且通常需要對未來幾年甚至幾分鐘之后的時間序列進行預測。如果你正要著手進行時間序列預測,那么本文將帶你快速掌握一些必不可少的概念。 目錄

什么是時間序列?

如何在Python中繪制時間序列數(shù)據(jù)?

時間序列的要素是什么?

如何分解時間序列?

經(jīng)典分解法

如何獲得季節(jié)性調(diào)整值?

STL分解法

時間序列預測的基本方法:

Python中的簡單移動平均(SMA)

為什么使用簡單移動平均?

Python中的加權(quán)移動平均(WMA)

Python中的指數(shù)移動平均(EMA)

什么是時間序列?

顧名思義,時間序列是按照固定時間間隔記錄的數(shù)據(jù)集。換句話說,以時間為索引的一組數(shù)據(jù)是一個時間序列。請注意,此處的固定時間間隔(例如每小時,每天,每周,每月,每季度)是至關(guān)重要的,意味著時間單位不應改變。別把它與序列中的缺失值混為一談。我們有相應的方法來填充時間序列中的缺失值。 在開始使用時間序列數(shù)據(jù)預測未來值之前,思考一下我們需要提前多久給出預測是尤其重要的。你是否應該提前一天,一周,六個月或十年來預測(我們用“界限”來表述這個技術(shù)術(shù)語)?需要進行預測的頻率是什么?在開始預測未來值的詳細工作之前,與將要使用你的預測結(jié)果的人談一談也不失為一個好主意。

如何在PYTHON中繪制時間序列數(shù)據(jù)?

可視化時間序列數(shù)據(jù)是數(shù)據(jù)科學家了解數(shù)據(jù)模式,時變性,異常值,離群值以及查看不同變量之間的關(guān)系所要做的第一件事。從繪圖查看中獲得的分析和見解不僅將有助于建立更好的預測,而且還將引導我們找到最合適的建模方法。這里我們將首先繪制折線圖。折線圖也許是時間序列數(shù)據(jù)可視化最通用的工具。 這里我們用到的是AirPassengers數(shù)據(jù)集。該數(shù)據(jù)集是從1949年到1960年之間的每月航空旅客人數(shù)的集合。下面是一個示例數(shù)據(jù),以便你對數(shù)據(jù)信息有個大概了解。

#Reading Time Series DataAirpassenger = pd.read_csv(“AirPassengers.csv”)Airpassenger.head(3) 現(xiàn)在,我們使用折線圖繪制數(shù)據(jù)。在下面的示例中,我們使用set_index()將date列轉(zhuǎn)換為索引。這樣就會自動在x軸上顯示時間。接下來,我們使用rcParams設置圖形大小,最后使用plot()函數(shù)繪制圖表。

Airpassenger = Airpassenger.set_index(‘date’)pyplot.rcParams[“figure.figsize”] = (12,6)Airpassenger.plot()pyplot.show()

b679235a-5434-11eb-8b86-12bb97331649.png

航空旅客人數(shù)

1949-1960年間,乘飛機旅行的乘客人數(shù)穩(wěn)定增長。規(guī)律性間隔的峰值表明增長似乎在有規(guī)律的時間間隔內(nèi)重復。 讓我們看看每個季度的趨勢是怎樣的。為了便于理解,從不同的維度觀察信息是個好主意。為此,我們需要使用Python中的datetime包從date變量中得出季度和年份。在進行繪圖之前,我們將連接年份和季度信息,以了解旅客數(shù)量在季節(jié)維度上如何變化。

from datetime import datetime# Airpassenger[“date”] = Airpassenger[“date”].apply(lambda x: datetime.strptime(x, “%d-%m-%Y”))Airpassenger[“year”] = Airpassenger[“date”].apply(lambda x: x.year)Airpassenger[“qtr”] = Airpassenger[“date”].apply(lambda x: x.quarter)Airpassenger[“yearQtr”]=Airpassenger[‘year’].astype(str)+‘_’+Airpassenger[‘qtr’].astype(str)airPassengerByQtr=Airpassenger[[“passengerCount”, “yearQtr”]].groupby([“yearQtr”]).sum() 準備好繪制數(shù)據(jù)后,我們繪制折線圖,并確保將所有時間標簽都放到x軸。x軸的標簽數(shù)量非常多,因此我們決定將標簽旋轉(zhuǎn)呈現(xiàn)。

pyplot.rcParams[“figure.figsize”] = (14,6)pyplot.plot(airPassengerByQtr)pyplot.xticks(airPassengerByQtr.index, rotation=‘vertical’)

b69dd45c-5434-11eb-8b86-12bb97331649.png

每季度的旅客總數(shù) 這幅圖非常有趣,它清晰地表明,在1949-1960年之間的所有年份中,航空旅客人數(shù)每季度都在顯著增加。

時間序列的要素是什么?

時間序列數(shù)據(jù)包含4個主要元素: 1. 趨勢性–趨勢性表示數(shù)據(jù)隨時間增加或減少的一般趨勢。這很容易理解。例如,1949年至1960年之間航空旅客數(shù)量呈增加趨勢,或者可以說呈上升趨勢。 2. 季節(jié)性–如同一年四季,數(shù)據(jù)模式出現(xiàn)在有規(guī)律的間隔之后,代表了時間序列的季節(jié)性組成部分。它們在特定的時間間隔(例如日,周,月,年等)之后重復。有時我們很容易弄清楚季節(jié)性,有時則未必。通常,我們可以繪制圖表并直觀檢驗季節(jié)性元素的存在。但是有時,我們可能不得不依靠統(tǒng)計方法來檢驗季節(jié)性。 3. 周期性–可被視為類似季節(jié)性,但唯一的區(qū)別是周期性不會定期出現(xiàn)。這個屬性使得它很難被辨識。例如,地震可以在我們知道將要發(fā)生的任何時間發(fā)生,但是我們其實不知道何時何地發(fā)生。 4. 隨機噪聲–不屬于上述三類情況的時間序列數(shù)據(jù)中的突然變化,而且也很難被解釋,因此被稱為隨機波動或隨機噪聲。

如何分解時間序列?

有兩種技術(shù)可以獲取時間序列要素。在進行深入研究和查看相關(guān)Python抽取函數(shù)之前,必須了解以下兩點:

時間序列不必具有所有要素。

弄清該時間序列是可加的還是可乘的。

那么什么是可加和可乘時間序列模型呢? 可加性模型–在可加性模型中,要素之間是累加的關(guān)系。 y(t)=季節(jié)+趨勢+周期+噪音 可乘性模型–在可乘性模型中,要素之間是相乘的關(guān)系。 y(t)=季節(jié)*趨勢*周期*噪音 你想知道為什么我們還要分解時間序列嗎?你看,分解背后的目的之一是估計季節(jié)性影響并提供經(jīng)過季節(jié)性調(diào)整的值。去除季節(jié)性的值就可以輕松查看趨勢。例如,在美國,由于農(nóng)業(yè)領(lǐng)域需求的增加,夏季的失業(yè)率有所下降。從經(jīng)濟學角度來講,這也意味著6月份的失業(yè)率與5月份相比有所下降?,F(xiàn)在,如果你已經(jīng)知道了邏輯,這并不代表真實的情況,我們必須調(diào)整這一事實,即6月份的失業(yè)率始終低于5月份。 這里的挑戰(zhàn)在于,在現(xiàn)實世界中,時間序列可能是可加性和可乘性的組合。這意味著我們可能并不總是能夠?qū)r間序列完全分解為可加的或可乘的。 現(xiàn)在你已經(jīng)了解了不同的模型,下面讓我們研究一些提取時間序列要素的常用方法。

經(jīng)典分解法

該方法起源于1920年,是諸多方法的鼻祖。經(jīng)典分解法有兩種形式:加法和乘法。Python中的statsmodels庫中的函數(shù)season_decompose()提供了經(jīng)典分解法的實現(xiàn)。在經(jīng)典分解法中,需要你指出時間序列是可加的還是可乘的。你可以在此處(https://otexts.com/fpp2/classical-decomposition.html)了解有關(guān)加法和乘法分解的更多信息。

在下面的代碼中,要獲得時間序列的分解,只需賦值model=additive。

import numpy as npfrom pandas import read_csvimport matplotlib.pyplot as pltfrom statsmodels.tsa.seasonal import seasonal_decomposefrom pylab import rcParams elecequip = read_csv(r“C:/Users/datas/python/data/elecequip.csv”)result = seasonal_decompose(np.array(elecequip), model=‘multiplicative’, freq=4) rcParams[‘figure.figsize’] = 10, 5result.plot()pyplot.figure(figsize=(40,10))pyplot.show()

b6c6495a-5434-11eb-8b86-12bb97331649.png

上圖的第一行代表實際數(shù)據(jù),底部的三行顯示了三個要素。這三個要素累加之后即可以獲得原始數(shù)據(jù)。第二個樣本集代表趨勢性,第三個樣本集代表季節(jié)性。如果我們考慮完整的時間范圍,你會看到趨勢一直在變化,并且在波動。對于季節(jié)性,很明顯,在規(guī)律的時間間隔之后可以看到峰值。

如何獲得季節(jié)性調(diào)整值?

對于可加性模型,可以通過y(t)– s(t)獲得季節(jié)性調(diào)整后的值,對于乘法數(shù)據(jù),可以使用y(t)/ s(t)來調(diào)整值。 如果你正想問為什么我們需要季節(jié)性調(diào)整后的數(shù)據(jù),讓我們回顧一下剛才討論過的有關(guān)美國失業(yè)率的示例。因此,如果季節(jié)性本身不是我們的主要關(guān)注點,那么季節(jié)性調(diào)整后的數(shù)據(jù)將更有用。盡管經(jīng)典方法很常見,但由于以下原因,不太建議使用它們:

該技術(shù)對異常值不可靠。

它傾向于使時間序列數(shù)據(jù)中的突然上升和下降過度平滑。

假設季節(jié)性因素每年只重復一次。

對于前幾次和最后幾次觀察,該方法都不會產(chǎn)生趨勢周期估計。

其他可用于分解的更好方法是X11分解,SEAT分解或STL分解。現(xiàn)在,我們將看到如何在Python中生成它們。 與經(jīng)典法,X11和SEAT分解法相比,STL具有許多優(yōu)點。接下來,讓我們探討STL分解法。

STL分解法

STL代表使用局部加權(quán)回歸(Loess)進行季節(jié)性和趨勢性分解。該方法對異常值具有魯棒性,可以處理任何類型的季節(jié)性。這個特性還使其成為一種通用的分解方法。使用STL時,你控制的幾件事是:

趨勢周期平滑度

季節(jié)性變化率

可以控制對用戶異常值或異常值的魯棒性。這樣你就可以控制離群值對季節(jié)性和趨勢性的影響。

同任何其他方法一樣,STL也有其缺點。例如,它不能自動處理日歷的變動。而且,它僅提供對可加性模型的分解。但是你可以得到乘法分解。你可以首先獲取數(shù)據(jù)日志,然后通過反向傳播要素來獲取結(jié)果。但是,這超出了本文討論的范圍。

Import pandas as pdImport seaborn as snsImport matplotlib.pyplot as pltFrom statsmodels.tsa.seasonal import STL elecequip =read_csv(r“C:/Users/datas/python/data/elecequip.csv”)stl = STL(elecequip, period=12, robust=True)res_robust = stl.fit()fig = res_robust.plot()

b6f1dac0-5434-11eb-8b86-12bb97331649.png

時間序列預測的基本方法

盡管有許多統(tǒng)計技術(shù)可用于預測時間序列數(shù)據(jù),我們這里僅介紹可用于有效的時間序列預測的最直接、最簡單的方法。這些方法還將用作其他方法的基礎。

PYTHON中的簡單移動平均(SMA)

簡單移動平均是可以用來預測的所有技術(shù)中最簡單的一種。通過取最后N個值的平均值來計算移動平均值。我們獲得的平均值被視為下一個時期的預測。

為什么使用簡單移動平均?

移動平均有助于我們快速識別數(shù)據(jù)趨勢。你可以使用移動平均值確定數(shù)據(jù)是遵循上升趨勢還是下降趨勢。它可以消除波峰波谷等不規(guī)則現(xiàn)象。這種計算移動平均值的方法稱為尾隨移動平均值。在下面的示例中,我們使用rolling()函數(shù)來獲取電氣設備銷售數(shù)據(jù)的移動平均線。

Import pandas as pdfrom matplotlib import pyplot elecequip = pd.read_csv(r“C:/Users/datas/python/data/elecequip.csv”) # Taking moving average of last 6 obsrolling = elecequip.rolling(window=6)rolling_mean = rolling.mean() # plot the two seriespyplot.plot(elecequip)pyplot.plot(rolling_mean, color=‘red’)pyplot.show()

b7318062-5434-11eb-8b86-12bb97331649.png

另一種方法是“中心移動平均”。在這里將任意給定時間(t)的值計算為當前,之前和之后的平均值。啟用center = True將提供中心移動平均值。

elecequip[“x”].rolling(window=3, center=True).mean()

PYTHON中的加權(quán)移動平均(WMA)

簡單移動平均非常樸素,因為它對過去的所有值給予同等的權(quán)重。但是當假設最新數(shù)據(jù)與實際值密切相關(guān),則對最新值賦予更多權(quán)重可能更有意義。 要計算WMA,我們要做的就是將過去的每個觀察值乘以一定的權(quán)重。例如,在6周的滾動窗口中,我們可以將6個權(quán)重賦給最近值,將1個權(quán)重賦給最后一個值。

import randomrand = [random.randint(1, i) for i in range(100,110)]data = {}data[“Sales”] = rand df = pd.DataFrame(data)weights = np.array([0.5, 0.25, 0.10]) sum_weights = np.sum(weights)df[‘WMA’]=(df[‘Sales’].rolling(window=3, center=True).apply(lambda x: np.sum(weights*x)/sum_weights, raw=False) )print(df[‘WMA’])

PYTHON中的指數(shù)移動平均(EMA)

在“指數(shù)移動平均”中,隨著觀察值的增加,權(quán)重將按指數(shù)遞減。該方法通常是一種出色的平滑技術(shù),可以從數(shù)據(jù)中消除很多噪聲,從而獲得更好的預測。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom statsmodels.tsa.api import ExponentialSmoothing EMA_fit = ExponentialSmoothing(elecequip, seasonal_periods=12, trend=‘a(chǎn)dd’, seasonal=‘a(chǎn)dd’).fit(use_boxcox=True)fcast3 = EMA_fit.forecast(12) ax = elecequip.plot(figsize=(10,6), marker=‘o’, color=‘black’, title=“Forecasts from Exponential Smoothing” )ax.set_ylabel(“Electrical Equipment”)ax.set_xlabel(“Index”) # For plotting fitted values# EMA_fit.fittedvalues.plot(ax=ax, style=‘--’, color=‘red’) EMA_fit.forecast(12).rename(‘EMS Forecast’).plot(ax=ax, style=‘--’, marker=‘o’, color=‘blue’, legend=True) 該方法具有以下兩種變體: 1. 簡單指數(shù)平滑–如果時間序列數(shù)據(jù)是具有恒定方差且沒有季節(jié)性的可加性模型,則可以使用簡單指數(shù)平滑來進行短期預測。 2. Holt指數(shù)平滑法–如果時間序列是趨勢增加或減少且沒有季節(jié)性的可加性模型,則可以使用Holt指數(shù)平滑法進行短期預測。 以下是從python中的statsmodels包導入兩個模型的代碼?,F(xiàn)在,你可以在練習中運行上述模型。

1

2

3

4import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from statsmodels.tsa.api import SimpleExpSmoothing, Holt

在本長篇教程中,我們講解了:

什么是時間序列數(shù)據(jù)?

如何可視化和更深入地識別數(shù)據(jù)模式(如果有)?

介紹了可加性和可乘性時間序列模型。

研究了Python中分解時間序列的不同方法。

最后,我們學習了如何在Python中運行一些非常基本的方法,例如移動平均(MA),加權(quán)移動平均(WMA),指數(shù)平滑模型(ESM)及其變體,例如SESM和Hotl。

原文標題:手把手教你用Python進行時間序列分解和預測

文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STL
    STL
    +關(guān)注

    關(guān)注

    0

    文章

    86

    瀏覽量

    18396
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85075

原文標題:手把手教你用Python進行時間序列分解和預測

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    時空引導下的時間序列自監(jiān)督學習框架

    考慮各個序列之間的關(guān)系。因此,本文提出的方法更適合作為時空預測領(lǐng)域的預訓練模型。下面為大家詳細介紹一下這篇文章。 摘要 相關(guān)時間序列分析在許多現(xiàn)實行業(yè)中扮演著重要的角色。為進一步的下游
    的頭像 發(fā)表于 11-15 11:41 ?342次閱讀
    時空引導下的<b class='flag-5'>時間</b><b class='flag-5'>序列</b>自監(jiān)督學習框架

    如何使用RNN進行時間序列預測

    一種強大的替代方案,能夠?qū)W習數(shù)據(jù)中的復雜模式,并進行準確的預測。 RNN的基本原理 RNN是一種具有循環(huán)結(jié)構(gòu)的神經(jīng)網(wǎng)絡,它能夠處理序列數(shù)據(jù)。在RNN中,每個輸入序列的元素都會通過一個或
    的頭像 發(fā)表于 11-15 09:45 ?419次閱讀

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡模型

    numpy tensorflow 2. 準備數(shù)據(jù) LSTM模型通常用于序列數(shù)據(jù),比如時間序列預測或文本生成。這里我們以一個簡單的時間
    的頭像 發(fā)表于 11-13 10:10 ?586次閱讀

    LSTM神經(jīng)網(wǎng)絡在時間序列預測中的應用

    時間序列預測是數(shù)據(jù)分析中的一個重要領(lǐng)域,它涉及到基于歷史數(shù)據(jù)預測未來值。隨著深度學習技術(shù)的發(fā)展,長短期記憶(LSTM)神經(jīng)網(wǎng)絡因其在處理序列
    的頭像 發(fā)表于 11-13 09:54 ?868次閱讀

    【「時間序列與機器學習」閱讀體驗】時間序列的信息提取

    本章主講時間序列的信息提取,章節(jié)中有許多概念定義和數(shù)學公式,并配有Python代碼演示,細細品讀與理解動手演練,還是很開拓思維視野的。下面以筆記形式進行展開。
    發(fā)表于 08-17 21:12

    【《時間序列與機器學習》閱讀體驗】+ 時間序列的信息提取

    之前對《時間序列與機器學習》一書進行了整體瀏覽,并且非常輕松愉快的完成了第一章的學習,今天開始學習第二章“時間序列的信息提取”。 先粗略的翻
    發(fā)表于 08-14 18:00

    【「時間序列與機器學習」閱讀體驗】+ 鳥瞰這本書

    清晰,從時間序列分析的基礎理論出發(fā),逐步深入到機器學習算法在時間序列預測中的應用,內(nèi)容全面,循序漸進。每一章都經(jīng)過精心設計,對理論知識
    發(fā)表于 08-12 11:28

    【《時間序列與機器學習》閱讀體驗】+ 了解時間序列

    學習方法對該序列數(shù)據(jù)進行分析,可以得到結(jié)論或預測估計,因此時間序列分析的用途是非常多的,比如: 可以反映社會經(jīng)濟現(xiàn)象的發(fā)展變化過程,描述現(xiàn)象
    發(fā)表于 08-11 17:55

    【「時間序列與機器學習」閱讀體驗】全書概覽與時間序列概述

    的,書籍封面如下。下面對全書概覽并對第一章時間序列概述進行細度。 一. 全書概覽 全書分為8章,每章的簡介如下: ●第1章“時間序列概述
    發(fā)表于 08-07 23:03

    深度學習中的時間序列分類方法

    時間序列分類(Time Series Classification, TSC)是機器學習和深度學習領(lǐng)域的重要任務之一,廣泛應用于人體活動識別、系統(tǒng)監(jiān)測、金融預測、醫(yī)療診斷等多個領(lǐng)域。隨著深度學習技術(shù)
    的頭像 發(fā)表于 07-09 15:54 ?1196次閱讀

    arimagarch模型怎么預測

    GARCH模型則用于捕捉時間序列的波動性。 以下是使用ARIMA-GARCH模型進行預測的一般步驟: 數(shù)據(jù)準備:首先需要收集和整理預測所需的
    的頭像 發(fā)表于 07-09 10:22 ?600次閱讀

    名單公布!【書籍評測活動NO.35】如何用時間序列與機器學習」解鎖未來?

    設備的運行狀況,生成各種維度的報告。 同時,通過大數(shù)據(jù)分析和機器學習技術(shù),可以對業(yè)務進行預測和預警,從而協(xié)助社會和企業(yè)進行科學決策、降低成本并創(chuàng)造新的價值。 當今時代,數(shù)據(jù)無處不在,而時間
    發(fā)表于 06-25 15:00

    何用三菱plc時間進行控制

    如何使用三菱PLC進行時間控制,包括基本概念、編程方法、實際應用案例等。 一、時間控制的基本概念 時間控制的定義 時間控制是指通過PLC對設備或系統(tǒng)
    的頭像 發(fā)表于 06-20 11:19 ?2317次閱讀

    時間序列分析的異常檢測綜述

    時間序列是在不同時點記錄一個或多個變量值的數(shù)據(jù)。例如,每天訪問網(wǎng)站的人數(shù)、每月城市的 average 溫度、每小時的股票價格等。時間序列非常重要,因為它們允許我們分析過去,理解現(xiàn)在,并
    的頭像 發(fā)表于 03-11 09:36 ?687次閱讀
    <b class='flag-5'>時間</b><b class='flag-5'>序列</b>分析的異常檢測綜述

    深度學習在時間序列預測的總結(jié)和未來方向分析

    2023年是大語言模型和穩(wěn)定擴散的一年,時間序列領(lǐng)域雖然沒有那么大的成就,但是卻有緩慢而穩(wěn)定的進展。Neurips、ICML和AAAI等會議都有transformer結(jié)構(gòu)(BasisFormer
    的頭像 發(fā)表于 02-24 08:26 ?926次閱讀
    深度學習在<b class='flag-5'>時間</b><b class='flag-5'>序列</b><b class='flag-5'>預測</b>的總結(jié)和未來方向分析