You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TFJS训练股票预测模型损失下降但准确率无法超过0.508如何解决

TensorFlow.js股票二分类模型准确率停滞问题排查与解决

核心问题根因

你遇到的准确率卡壳、损失持续下降的问题,本质是配置错误+金融数据特性共同导致的:

  • 输入特征未做归一化:特征中交易量量级是百万级,其余价格类特征都是个位数,大数值特征会完全主导梯度更新,小特征的信号直接被淹没,模型学不到有效特征关联
  • 损失函数与输出层、标签不匹配:你用2输出softmax层搭配binaryCrossentropy损失本身就是错误搭配,如果你用one-hot格式的二分类标签,应该用categoricalCrossentropy损失
  • 数据集类别不平衡+金融数据低信噪比:你卡的0.5088准确率,刚好就是你的数据集中盈利样本的占比,模型偷懒直接全部预测为占比更高的类别,所以准确率卡在该值不动,损失下降只是模型在不断提升多数类的预测置信度,不会改变分类结果
  • 未拆分训练集验证集:全量数据训练无法区分是模型欠拟合还是过拟合到训练集的多数类

可直接落地的修改方案

1. 补充特征归一化

先统计全数据集各特征的极值,在数据预处理环节做min-max归一化,把所有特征缩放到0-1区间:

async function run() {
    const csvUrl = 'SOXLcateg.csv';
    const trainingData = tf.data.csv(csvUrl, {
        columnConfigs: {
            next_day_inc: {
                isLabel: true
            }
        }
    });
    // 新增:统计所有特征的最大最小值用于归一化
    const allXs = await trainingData.map(({xs}) => Object.values(xs)).toArray();
    const xsTensor = tf.tensor2d(allXs);
    const [xMax, xMin] = [xsTensor.max(0), xsTensor.min(0)];

    const convertedData = trainingData.map(({ xs, ys }) => {
        // 标签简化为单值二分类,不需要冗余one-hot编码
        const label = ys.next_day_inc == "profit" ? 1 : 0;
        // 对输入特征做归一化
        const normalizedX = tf.tensor1d(Object.values(xs)).sub(xMin).div(xMax.sub(xMin)).arraySync();
        return { xs: normalizedX, ys: label };
    }).batch(32); // batch size调整为32,避免过大批量导致的更新滞后
    const numOfFeatures = (await trainingData.columnNames()).length - 1;

2. 修正模型结构和损失函数匹配

改成适配二分类任务的标准配置:

const model = tf.sequential();
    model.add(tf.layers.dense({
        inputShape: [numOfFeatures],
        activation: "relu", units: 16
    }));
    model.add(tf.layers.dropout({rate: 0.3})); // 新增dropout层缓解过拟合
    model.add(tf.layers.dense({ activation: "sigmoid", units: 1 }));
    model.compile({
        loss: "binaryCrossentropy",
        optimizer: tf.train.adam(0.001),
        metrics: ["accuracy"]
    })

3. 补充训练集验证集拆分

不要用全量数据训练,至少拆分70%为训练集、30%为验证集,训练时传入validationData参数,观察验证集准确率变化,避免过拟合到训练集。

4. 后续优化建议

不要直接用原始的OHLCV绝对数值当特征,换成相对特征效果会好很多,比如当日涨跌幅、5日涨跌幅、量比、收盘价偏离5日均线比例等,金融时序数据用相对指标比绝对指标有效得多。

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 04:33:03