项目概览
作者开源了一个以 比特币价格预测 为主题的 Python 教程仓库,核心聚焦在“2 天后 BTC 价格是多少”。整份代码由两本 Jupyter Notebook 组成:
- BitcoinPricePrediction.ipynb——主教程,演示如何把历史行情&社区数据喂给线性回归模型;
- MakingPredictionsWithModel-Demo.ipynb——把主教程中 Step 5 的“测试集”生成过程拆出来,方便你边跑边看结果。
放心,目标并不是做出“精确到小数后两位”的神预测,而是用一个真实而热门的场景带你入门 Python 数据分析、特征工程与可视化,顺带学会 从 API 抓取行情数据 这套组合拳。
任务拆解:如何用线性回归估算未来比特币价格
1. 数据来源:CoinGecko API 免费接口
- 不注册、不密钥,直接 GET 就能拿到 JSON,对新手极为友好。
- 默认抓取 2 天前的比特币价格、以太坊价格 作为滞后特征,还顺手撸了点 社交热度指标(推文、Reddit 讨论数等)。
👉 点击查看如何把 JSON 数据 1 行代码变 DataFrame
2. 数据预处理:pandas 的工程化姿势
- 用
pd.to_datetime
解决时间戳乱序; pct_change()
计算对数收益率,比直接用收盘价更能表达波动;特征构造 举例:
- BTC 1 日、2 日、7 日简单移动平均;
- ETH/BTC 价格比,当做市场情绪代理。
3. 可视化:用 matplotlib & seaborn 找“有用特征”
pairplot
一两张图就能扫清相关性门槛;heatmap
把多重共线性特征红成一条线,留下来建模才安心。
4. 模型训练:线性回归三剑客
模型 | 关键词 | 场景定位 |
---|---|---|
普通线性回归 | 快速基线 | 概念易懂,用于对照误差 |
Ridge 回归 | L2 正则 | 削弱极端系数,避免过拟合 |
Lasso 回归 | L1 正则 | 稀疏特征,用少的参数讲明白 |
实战里,你会亲手把数据三折交叉验证,看 RMSE 谁更低;- 下节课再讲正则化背后的理论,这里先体会“调 λ 就用 RidgeCV
、LassoCV
”这一行代码的魔法。
5. 在线预测部署思路(拓展)
把 .predict
结果打包成 RESTful API,或用 Streamlit 快速做成网页小程序;CVS 流式每分钟更新行情,就能随时刷一条“2 天后 BTC 预计:$××××”。👉 想抄完整代码模板,直接进这里
TODO:下一步进阶清单
- 使用 statsmodels 做时间序列诊断:ADF 平稳性检验、白噪声残差图;
- 加入 指数平滑(Exponential Smoothing) 和 ARMA 模型,与线性回归 baseline 做误差对比;
- 代码迁移到 GPU 版本 XGBoost 或 LSTM,用深度学习测试非线性模式是否更准确。
常见问题 FAQ
Q1:这套脚本能在 2025 年继续跑通吗?
A:可以。只要 CoinGecko API 不改版本,替换日期列即可。若遇字段变更,用 pd.json_normalize
把 JSON 展平再对应列名即可。
Q2:我只想预测 1 天后的价格,怎么调?
A:把 lag=2
改成 lag=1
并相应移动标签列即可。注意重新评估正则化超参数,短周期噪声更高,Ridge 的 α 可能需要上调。
Q3:我的本机没装 Python 环境怎么办?
A:直接用 Google Colab 打开 .ipynb
就能跑,GPU 免费,依赖用 pip install -r requirements.txt
一条指令解决。
Q4:为什么不用 LSTM 这种更高级的模型?
A:教程定位是线性回归入门,侧重教会“数据怎么来、怎么洗、怎么评价”。当你理解 baseline 误差后,再升级模型才有对比意义。
Q5:社区数据真的很重要吗?
A:在短周期(1–2 天)里,推特情绪与谷歌趋势确实对冲动交易有解释力;但若拉长时间窗,历史价格仍是主因。