技术分析、交互式仪表盘构建与时间序列分析
立即解锁
发布时间: 2025-09-01 00:33:33 阅读量: 10 订阅数: 28 AIGC 

### 技术分析、交互式仪表盘构建与时间序列分析
#### 技术分析与交互式仪表盘部署
在进行技术分析和构建交互式仪表盘时,Streamlit 平台操作十分直观。在部署 Web 应用到 Streamlit Cloud 的步骤 4 中,还可提供一些高级设置:
- **Python 版本**:指定应用要使用的 Python 版本。
- **Secrets 字段**:可存储环境变量和机密信息,如 API 密钥。一般而言,将用户名、API 密钥等机密信息存储在公共 GitHub 仓库并非最佳实践。若应用从某些数据提供商或内部数据库获取数据,可在此字段安全存储凭证,这些凭证在运行时会被加密并安全地提供给应用。
除了部署到 Streamlit Cloud,还可将应用部署到 Heroku,它是一种平台即服务(PaaS)类型的平台,能让你完全在云端构建、运行和操作应用。
若应用中要使用多个库,创建包含这些库的需求文件的最简单方法是,在激活虚拟环境后运行以下命令:
```python
pip freeze > requirements.txt
```
#### 时间序列分析与预测基础
时间序列在行业和研究中无处不在,如商业、科技、医疗、能源、金融等领域。在金融领域,时间维度是交易和许多金融/经济指标的固有属性。实际上,每个企业都会生成某种时间序列,如随时间收集的利润或其他关键绩效指标(KPI)。因此,后续介绍的技术可用于工作中遇到的任何时间序列分析任务。
时间序列建模或预测通常可从不同角度进行,最常用的是统计方法和机器学习方法。此外,在深度学习应用中也会涉及使用深度学习进行时间序列预测的示例。
过去,由于计算能力有限且时间序列数据不够精细,统计方法在该领域占主导地位。如今,基于机器学习的方法在生产环境中的时间序列模型方面逐渐领先。但这并不意味着经典统计方法不再重要,在训练数据较少的情况下(如 3 年的月度数据),统计方法仍能产生最先进的结果,因为机器学习模型可能无法从少量数据中学习到模式。而且,在一些时间序列预测竞赛中,统计方法也取得了不少胜利。
### 时间序列建模基础
#### 时间序列分解
时间序列分解的目标之一是通过将序列分解为多个组件,加深对数据的理解,为建模复杂度和采用何种方法准确捕捉每个组件提供见解。
例如,对于有明显上升或下降趋势的时间序列,一方面可通过分解提取趋势组件并在建模前去除,使时间序列更平稳,之后再将趋势组件加回;另一方面,也可为算法提供足够数据或合适特征来直接建模趋势。
时间序列的组件可分为系统性和非系统性两类:
- **系统性组件**:具有一致性,可描述和建模,包括:
- **水平**:序列的均值。
- **趋势**:任意时刻连续时间点之间值的变化估计,与序列的斜率(上升/下降)相关,即时间序列在较长时期内的总体方向。
- **季节性**:由重复的短期周期(具有固定和已知周期)导致的均值偏差。
- **非系统性组件**:无法直接建模,即**噪声**,是去除其他组件后序列中的随机变化。
经典的时间序列分解通常使用加法模型和乘法模型:
| 模型类型 | 模型形式 | 变化特点 | 趋势特点 | 季节性特点 |
| --- | --- | --- | --- | --- |
| 加法模型 | \(y(t) = level + trend + seasonality + noise\) | 随时间变化大小一致 | 线性(直线) | 周期频率(宽度)和振幅(高度)相同的线性季节性 |
| 乘法模型 | \(y(t) = level \times trend \times seasonality \times noise\) | 随时间变化大小不一致,如指数变化 | 曲线、非线性 | 周期频率和振幅随时间增加或减少的非线性季节性 |
有时可能不想或因某些模型假设无法使用乘法模型,可通过对数变换将其转换为加法模型:
\(\log(y(t)) = \log(level) + \log(trend) + \log(seasonality) + \log(noise)\)
下面以从 Nasdaq Data Link 下载的美国月度失业率数据为例,介绍时间序列分解的步骤:
```python
# 1. 导入库并进行身份验证
import pandas as pd
import nasdaqdatalink
import seaborn as sns
from statsmodels.tsa.seasonal import seasonal_decompose
nasdaqdatalink.ApiConfig.api_key = "YOUR_KEY_HERE"
# 2. 下载 2010 年至 2019 年的美国月度失业率数据
df = (
nasdaqdatalink.get(dataset="FRED/UNRATENSA",
start_date="2010-01-01",
end_date="2019-12-31")
.rename(columns={"Value": "unemp_rate"})
)
# 3. 添加滚动均值和标准差
WINDOW_SIZE = 12
df["rolling_mean"] = df["unemp_rate"].rolling(window=WINDOW_SIZE).mean()
df["rolling_std"] = df["unemp_rate"].rolling(window=WINDOW_SIZE).std()
df.plot(title="Unemployment rate")
# 4. 使用加法模型进行季节性分解
decomposition_results = seasonal_decompose(df["unemp_rate"],
model="additive")
(
decomposition_results
.plot()
.suptitle("Additive Decomposition")
)
```
在上述代码中,下载数据后,使用 pandas DataFrame 的 `rolling` 方法计算滚动统计量,指定窗口大小为 12 个月。
0
0
复制全文
相关推荐









