
99%的普通人可能会想:机器学习是不是离我们很远?是不是得是数学系出身、懂AI才能搞?
其实啊,不用那么复杂!机器学习,说白了,就是让电脑自己学经验,帮你做判断。就像你小时候看多了猫狗的照片,后来不用人教也能一眼认出来,这就是人类的"学习"。电脑呢?也类似,也是看图学样子,慢慢从数据里"悟"出来一些规律。
今天花姐带你搞点实在的,用Python做一个分类模型 ,让它告诉我们:明天股市涨还是跌?该买还是该卖?
入门准备:你得会点啥?
在开始之前,有几个小前提,咱先说清楚。
你起码要:
- 会用Python做点基本数据处理(不会也行,我代码写得很清楚)
- 知道怎么拿到股票数据,比如用
AKShare、tushare、baoStock
等 - 最好对股票市场有点基础概念(但不强求)
如果你是完全0基础,也别慌,你可以收藏起来等你以后想学的时候再翻出来。
什么是机器学习?
简单说,它是这样一件事:
我们不再告诉电脑"你遇到什么情况该怎么做",而是------我们给它很多例子,它自己去总结规律。
举个例子:
以前如果要写个自动驾驶的程序,代码会这样写:
python
if 遇到红灯:
停车
if 遇到绿灯:
行走
if 遇到黄灯:
等一等
现在不需要这么麻烦了。你把几千张有红灯、绿灯、黄灯的照片扔给它,它自己学着分辨。
股票市场也一样------你不告诉它"哪个形态会涨",而是你喂给它历史数据,它自己去找规律。
分类模型是啥?
"分类"就是分门别类。电脑会看图说话,说:"这是涨的信号""这是跌的信号"。
这就像你教小朋友认识水果:圆的是苹果,长的是香蕉,带毛的是猕猴桃,教多了,孩子看到新水果也能猜个八九不离十。
在股票里,我们可以做很多分类:明天涨 or 跌(这就是二分类 );买 / 持有 / 卖(这是多分类 );极端行情 or 普通震荡(不平衡分类),今天我们先从最简单的二分类学起来。
来,建个模型预测明天涨不涨
第一步:把工具都请出来
先把用到的Python包安装下
bash
pip install pandas numpy baostock matplotlib seaborn scikit-learn
pandas和numpy是用来处理数据的,baostock是用来获取股票行情的,matplotlib是画图的,seaborn是在matplotlib基础上封装的库,让画出来的图更美观,sklearn是用来做机器学习的,其中SVC 是支持向量机(Support Vector Classifier),一个分类模型。我们可以用它来判断股票明天是涨还是跌,属于"监督学习"的一类。accuracy_score用来评估模型效果的,比如模型预测得准不准,算个准确率出来,一看就知道行不行。
python
import pandas as pd
import numpy as np
import baostock as bs
import matplotlib.pyplot as plt
import seaborn
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
第二步:下载沪深300指数行情
这里用沪深300指数来做演示,你也可以换成其它股票
python
# 登陆系统
lg = bs.login()
if lg.error_code != '0':
print("登录失败,错误信息:", lg.error_msg)
else:
print("登录成功")
# 获取沪深300指数日线数据,代码是"sh.000300"
rs = bs.query_history_k_data_plus("sh.000300",
"date,code,open,high,low,close,volume",
start_date='2020-01-01', end_date='2025-06-10',
frequency="d", adjustflag='3') # '3'代表不复权
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
df = pd.DataFrame(data_list, columns=rs.fields)
# 登出
bs.logout()
# 转换为数字类型
for col in ['open', 'high', 'low', 'close', 'volume']:
df[col] = df[col].astype(float)
df.close.plot(figsize=(10,5))
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False # 解决负数乱码问题
plt.ylabel("沪深300 收盘价")
plt.show()
数据获取以后我们用plt绘制下收盘价走势图

第三步:明确"预测目标"
原始行情有了,接下来我们要通过程序来做标记,标记的内容为:
"明天会涨吗?"
代码是这么写的:
python
y = np.where(df['close'].shift(-1) > df['close'], 1, -1)
这样我们会得到一个[-1 -1 1 ... 1 -1 -1]
这样的数组,1表示明天会上涨,-1表示明天会下跌。
第四步:帮模型生成特征因子
到这一步,你可能在想:"模型怎么知道涨还是跌啊?凭感觉吗?"当然不是啦~我们得先喂给它一些线索,也就是------特征因子
其实特征因子嘛,说白了就是你"告诉模型看什么"的方式。能用的非常多,比如价格的变化(开盘、收盘、最高、最低)、技术指标(像RSI、MACD、布林带)、成交量的异动,甚至是某些衍生指标,比如过去几天的涨跌次数、震荡区间、强弱股排名等等。
聪明的你可能已经想到------"这些是不是都可以自己组合?"没错!这时候AI就能帮上大忙了。现在很多量化平台、甚至开源工具都可以帮你自动生成、组合和筛选因子。
python
df['open-close'] = df.open - df.close
df['high-low'] = df.high - df.low
df['ma5'] = df['close'].rolling(window=5).mean()
df = df.dropna() #计算均线后会产生空值,这里把空值删除
X = df[['open-close', 'high-low','ma5']]
上面的代码我们用了3个最简单的特征:
- 今开今收差值
- 今高今低的波动幅度
- 5日均线
生产环境下,请根据你自己的经验来设置
第五步:拆开数据,一部分训练,一部分测试
python
split = int(0.8 * len(df))
X_train, y_train = X[:split], y[:split]
X_test, y_test = X[split:], y[split:]
这就像备战高考一样------通过3年的学习:看书、刷题(训练数据 train data);然后高考那天,碰上一堆没见过的新题(测试数据 test data),看看到底学得怎么样。
第六步:模型上线!
python
cls = SVC().fit(X_train, y_train)
SVC,也就是支持向量机,处理这种简单的分类任务------它真的蛮好用的,入门首选。
第七步:效果到底咋样?看看分数先!
python
accuracy_train = accuracy_score(y_train, cls.predict(X_train))
accuracy_test = accuracy_score(y_test, cls.predict(X_test))
print(f"\nTrain Accuracy: {accuracy_train*100:.2f}%")
print(f"Test Accuracy: {accuracy_test*100:.2f}%")
只要测试集 (Test Accuracy) 准确率超过50%,就已经打赢了"硬币交易者"😎
第八步:做点真实预测 + 模拟收益
python
df['Predicted_Signal'] = 0
df['Predicted_Signal'].iloc[split:] = cls.predict(X_test)
df['Return'] = np.log(df.close.shift(-1) / df.close) * 100
df['Strategy_Return'] = df['Return'] * df['Predicted_Signal']
这个逻辑很实在:如果模型说"涨",我们就进场。回头看收益就知道对不对。
第九步:来,画个图,看赚钱没?
python
df['Strategy_Return'].iloc[split:].cumsum().plot(figsize=(10,5))
plt.ylabel("Strategy Returns (%)")
plt.show()
这个图画出来,如果是一路向上,那你这策略就是"挣了"。
如果一地鸡毛......那也别伤心,至少你开始上手机器学习了!
花姐说
你可能会问:
花姐,这种模型真的能用吗?
我的回答是------它不能直接拿来上实盘。
这只是一个最基础的机器学习分类模型,还有很多需要改进的地方,比如:多加点特征,像MACD、RSI、布林线、量比啥的;更换不同的分类模型,比如逻辑回归、随机森林、XGBoost、甚至深度学习;用更长的数据周期、或者不同市场数据试试看;加点风控,比如止损止盈、资金管理、仓位控制等等
一句话:不断试,不断错,不断调。机器学习就是个炼丹过程。
你可以大胆动手改代码,每动一次,也许就离一个稳定盈利的策略更近一步
祝你越学越有感觉,越投越上头,早日训练出属于自己的赚钱模型!