电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:2日期:2022-06-26 18:58:23

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

目錄 什么是時間序列? 如何在Python中繪制時間序列數據? 時間序列的要素是什么? 如何分解時間序列? 經典分解法 如何獲得季節性調整值? STL分解法 時間序列預測的基本方法: Python中的簡單移動平均(SMA) 為什么使用簡單移動平均? Python中的加權移動平均(WMA) Python中的指數移動平均(EMA)什么是時間序列?

顧名思義,時間序列是按照固定時間間隔記錄的數據集。換句話說,以時間為索引的一組數據是一個時間序列。請注意,此處的固定時間間隔(例如每小時,每天,每周,每月,每季度)是至關重要的,意味著時間單位不應改變。別把它與序列中的缺失值混為一談。我們有相應的方法來填充時間序列中的缺失值。

在開始使用時間序列數據預測未來值之前,思考一下我們需要提前多久給出預測是尤其重要的。你是否應該提前一天,一周,六個月或十年來預測(我們用“界限”來表述這個技術術語)?需要進行預測的頻率是什么?在開始預測未來值的詳細工作之前,與將要使用你的預測結果的人談一談也不失為一個好主意。

如何在Python中繪制時間序列數據?

可視化時間序列數據是數據科學家了解數據模式,時變性,異常值,離群值以及查看不同變量之間的關系所要做的第一件事。從繪圖查看中獲得的分析和見解不僅將有助于建立更好的預測,而且還將引導我們找到最合適的建模方法。這里我們將首先繪制折線圖。折線圖也許是時間序列數據可視化最通用的工具。

這里我們用到的是AirPassengers數據集。該數據集是從1949年到1960年之間的每月航空旅客人數的集合。下面是一個示例數據,以便你對數據信息有個大概了解。

#Reading Time Series DataAirpassenger = pd.read_csv('AirPassengers.csv')Airpassenger.head(3)

現在,我們使用折線圖繪制數據。在下面的示例中,我們使用set_index()將date列轉換為索引。這樣就會自動在x軸上顯示時間。接下來,我們使用rcParams設置圖形大小,最后使用plot()函數繪制圖表。

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

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

1949-1960年間,乘飛機旅行的乘客人數穩定增長。規律性間隔的峰值表明增長似乎在有規律的時間間隔內重復。

讓我們看看每個季度的趨勢是怎樣的。為了便于理解,從不同的維度觀察信息是個好主意。為此,我們需要使用Python中的datetime包從date變量中得出季度和年份。在進行繪圖之前,我們將連接年份和季度信息,以了解旅客數量在季節維度上如何變化。

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()

準備好繪制數據后,我們繪制折線圖,并確保將所有時間標簽都放到x軸。x軸的標簽數量非常多,因此我們決定將標簽旋轉呈現。

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

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

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

時間序列的要素是什么?

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

如何分解時間序列?

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

時間序列不必具有所有要素。 弄清該時間序列是可加的還是可乘的。

那么什么是可加和可乘時間序列模型呢?

可加性模型?在可加性模型中,要素之間是累加的關系。y(t)=季節+趨勢+周期+噪音

可乘性模型?在可乘性模型中,要素之間是相乘的關系。y(t)=季節趨勢周期*噪音

你想知道為什么我們還要分解時間序列嗎?你看,分解背后的目的之一是估計季節性影響并提供經過季節性調整的值。去除季節性的值就可以輕松查看趨勢。例如,在美國,由于農業領域需求的增加,夏季的失業率有所下降。從經濟學角度來講,這也意味著6月份的失業率與5月份相比有所下降。現在,如果你已經知道了邏輯,這并不代表真實的情況,我們必須調整這一事實,即6月份的失業率始終低于5月份。

這里的挑戰在于,在現實世界中,時間序列可能是可加性和可乘性的組合。這意味著我們可能并不總是能夠將時間序列完全分解為可加的或可乘的。

現在你已經了解了不同的模型,下面讓我們研究一些提取時間序列要素的常用方法。

經典分解法

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

在下面的代碼中,要獲得時間序列的分解,只需賦值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()

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

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

如何獲得季節性調整值?

對于可加性模型,可以通過y(t)? s(t)獲得季節性調整后的值,對于乘法數據,可以使用y(t)/ s(t)來調整值。

如果你正想問為什么我們需要季節性調整后的數據,讓我們回顧一下剛才討論過的有關美國失業率的示例。因此,如果季節性本身不是我們的主要關注點,那么季節性調整后的數據將更有用。盡管經典方法很常見,但由于以下原因,不太建議使用它們:

該技術對異常值不可靠。 它傾向于使時間序列數據中的突然上升和下降過度平滑。 假設季節性因素每年只重復一次。 對于前幾次和最后幾次觀察,該方法都不會產生趨勢周期估計。

其他可用于分解的更好方法是X11分解,SEAT分解或STL分解。現在,我們將看到如何在Python中生成它們。

與經典法,X11和SEAT分解法相比,STL具有許多優點。接下來,讓我們探討STL分解法。

STL分解法

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

趨勢周期平滑度 季節性變化率 可以控制對用戶異常值或異常值的魯棒性。這樣你就可以控制離群值對季節性和趨勢性的影響。

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

Import pandas as pdImport seaborn as snsImport matplotlib.pyplot as pltFrom statsmodels.tsa.seasonal import STLelecequip =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()

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

時間序列預測的基本方法

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

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

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

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

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

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()

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

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

elecequip['x'].rolling(window=3, center=True).mean()PYTHON中的加權移動平均(WMA)

簡單移動平均非常樸素,因為它對過去的所有值給予同等的權重。但是當假設最新數據與實際值密切相關,則對最新值賦予更多權重可能更有意義。

要計算WMA,我們要做的就是將過去的每個觀察值乘以一定的權重。例如,在6周的滾動窗口中,我們可以將6個權重賦給最近值,將1個權重賦給最后一個值。

import randomrand = [random.randint(1, i) for i in range(100,110)]data = {}data['Sales'] = randdf = 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中的指數移動平均(EMA)

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

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom statsmodels.tsa.api import ExponentialSmoothing EMA_fit = ExponentialSmoothing(elecequip, seasonal_periods=12, trend=’add’, seasonal=’add’).fit(use_boxcox=True)fcast3 = EMA_fit.forecast(12) ax = elecequip.plot(figsize=(10,6), marker=’o’, color=’black’, )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.簡單指數平滑?如果時間序列數據是具有恒定方差且沒有季節性的可加性模型,則可以使用簡單指數平滑來進行短期預測。2.Holt指數平滑法?如果時間序列是趨勢增加或減少且沒有季節性的可加性模型,則可以使用Holt指數平滑法進行短期預測。

以下是從python中的statsmodels包導入兩個模型的代碼。現在,你可以在練習中運行上述模型。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom statsmodels.tsa.api import SimpleExpSmoothing, Holt

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

什么是時間序列數據? 如何可視化和更深入地識別數據模式(如果有)? 介紹了可加性和可乘性時間序列模型。 研究了Python中分解時間序列的不同方法。

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

以上就是如何用Python進行時間序列分解和預測的詳細內容,更多關于python 時間序列分解和預測的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 北京公寓出租网-北京酒店式公寓出租平台 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 上海佳武自动化科技有限公司 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂| 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | IPO咨询公司-IPO上市服务-细分市场研究-龙马咨询 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 缠膜机|缠绕包装机|无纺布包装机-济南达伦特机械设备有限公司 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 品牌广告服务平台,好排名,好流量,好生意。 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 |