一、時間序列的概念
時間序列是指按時間先後順序排列的一系列數據點。它可以表示任何可度量的現象或行為。
以股票價格為例,我們可以將每天的收盤價放在時間軸上,得到一段時間序列。這個序列可以用來預測未來的股價變化。
通過對時間序列的分析,我們可以了解到某個現象或行為的趨勢、周期、季節性等特徵,從而做出合理的預測和決策。
二、時間序列分析的方法
1. 基本統計分析
基本統計分析是對時間序列進行最簡單的分析,包括均值、中位數、標準差、最大值、最小值等統計指標。通過這些指標的分析,我們可以了解時間序列的分布情況和數據趨勢。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 讀取數據
data = pd.read_csv('data.csv')
# 計算均值
mean = data.mean()
# 計算標準差
std = data.std()
# 繪製時間序列圖
plt.plot(data)
plt.show()
2. 分解法
分解法是將時間序列分解為趨勢、周期和隨機擾動三個部分。通過對這三個部分的分析可以了解時間序列的各種特徵。
from statsmodels.tsa.seasonal import seasonal_decompose
# 進行分解
result = seasonal_decompose(data, model='multiplicative')
# 畫出分解圖
result.plot()
plt.show()
3. 平穩性檢驗
平穩性是指時間序列在統計意義下的某些性質不隨時間而發生變化。平穩序列的分析相對簡單,因此平穩性檢驗是時間序列分析中非常重要的一部分。
from statsmodels.tsa.stattools import adfuller
# 進行平穩性檢驗
result = adfuller(data)
# 輸出檢驗結果
print('ADF statistic:', result[0])
print('p-value:', result[1])
4. 模型擬合
模型擬合是指根據已有的時間序列數據,擬合一個數學模型,並用這個模型預測未來的值。
from statsmodels.tsa.arima_model import ARIMA
# 擬合ARIMA模型
model = ARIMA(data, order=(1, 1, 1))
result = model.fit()
# 輸出模型參數
print(result.params)
三、時間序列的應用
1. 股票價格預測
利用歷史的股票價格數據,可以分析出其趨勢、周期和季節性等特徵,然後建立一個時間序列模型,根據模型預測未來的股價變化。
import yfinance as yf
# 讀取數據
data = yf.download('AAPL', start='2020-01-01', end='2021-01-01')
# 擬合ARIMA模型
model = ARIMA(data['Close'], order=(1, 1, 1))
result = model.fit()
# 預測未來股價
forecast = result.predict(start='2021-01-02', end='2021-02-01')
# 輸出預測結果
print(forecast)
2. 風力發電功率預測
利用歷史的風力發電功率數據,可以分析出其季節性和年度變化等特徵,然後建立一個時間序列模型,根據模型預測未來的發電功率。
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
# 讀取數據
data = pd.read_csv('wind_power.csv')
# 擬合ARIMA模型
model = ARIMA(data['Power'], order=(1, 1, 1))
result = model.fit()
# 預測未來發電功率
forecast = result.predict(start='2022-01-01', end='2022-12-31')
# 輸出預測結果
print(forecast)
3. 交通流量預測
利用歷史的交通流量數據,可以分析出其周期性和季節性等特徵,然後建立一個時間序列模型,根據模型預測未來的交通流量。
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
# 讀取數據
data = pd.read_csv('traffic_flow.csv')
# 擬合ARIMA模型
model = ARIMA(data['Flow'], order=(1, 1, 1))
result = model.fit()
# 預測未來交通流量
forecast = result.predict(start='2022-01-01', end='2022-12-31')
# 輸出預測結果
print(forecast)
原創文章,作者:NKAVT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372835.html