千里眼 — AIが株価ニュースを読み、翌日の値動きを予測する

課題

株式ニュースは毎日大量に発信されますが、個人投資家がすべてを読み、翌日の値動きを判断するのは現実的ではありません。

解決策

5種類の企業データとニュースをLLM(大規模言語モデル)に入力し、翌日の株価変動率を自動予測するWebサービスを構築しました。

成果

毎日自動で予測を実行し、日本語・英語の両方で senrigan.tech にて結果を公開しています。

千里眼 — AI株価予測サービス

なぜこのプロジェクトを作ったのか

2023年、英国の金融比較サイト Finder が行った実験が注目を集めました。ChatGPTに38銘柄を選ばせたポートフォリオが、63日間で +4.9% のリターンを記録したのです。同じ期間、英国で人気トップ10のファンド(HSBC、Fidelity等)の平均は -0.8%。2年間の累計では +41.97%+27.63% と、14ポイント以上の差がつきました。

参考: ChatGPT can pick stocks better than your fund manager (CNN Business)

もちろん限定的な実験であり、これだけで「AIが投資のプロに勝った」と結論づけることはできません。しかし、LLMが企業ニュースを「読み」、投資判断に活かせる可能性があることは示されました。

「日本株のニュースでも、同じことができるのではないか?」

この問いが、千里眼プロジェクトの出発点です。


千里眼が解決する課題

個人投資家の情報処理の限界

日本市場では毎日数百件の適時開示情報(TDnet)やニュースが発信されます。決算発表、業績修正、配当予想など、それぞれが株価に影響を与える可能性がありますが、すべてを読み込んで判断するには膨大な時間がかかります。

従来のアプローチの限界

従来の株価予測は、LSTM や ARIMA といった数値的な時系列モデルが主流でした。しかし、これらのモデルには根本的な制約があります。ニュースという自然言語情報を扱えないのです。

「経常利益51%上方修正」というニュースが出たとき、それが株価にどう影響するかは、数値データだけでは判断できません。ニュースの文脈、業界の状況、市場の期待値を総合的に理解する必要があります。

千里眼のアプローチ

千里眼は、LLM(大規模言語モデル)をファインチューニング(追加学習)することで、この課題に取り組んでいます。企業の数値データとニュースの自然言語情報を統合し、翌日の株価変動を予測します。


どう動くのか

入力データ(5種類を統合)

千里眼は、1つのニュースに対して以下の5種類のデータを組み合わせて予測を行います。

データ種別内容
企業情報業種、時価総額、会社概要化学、289億円、アクリル原料粘着剤大手
ニュース適時開示、決算発表等「経常利益51%上方修正、過去最高益を上乗せ」
株価データ直近5営業日のOHLCV始値、高値、安値、終値、出来高
財務データ2年分の売上・利益率・ROE等売上高413億円、利益率9.26%、ROE 8.38%
マクロ指標CPI、GDP成長率、政策金利等CPI 107.95、政策金利0.75%、USD/JPY 151.37

出力(3種類の予測値)

予測結果(JSON形式):
{
  "当日終値→翌日始値": "+1.2%",    ← オーバーナイトの変動
  "当日終値→翌日終値": "+2.5%",    ← 1日通しての変動
  "翌日始値→翌日終値": "+1.3%"     ← 日中の変動
}

加えて、LLMが予測の根拠となる分析テキスト(予測理由)も日本語・英語で生成します。

システム全体像

ニュース発信 → データ収集・統合 → AI予測 → データ同期 → Web表示
                 (PHP/MySQL)      (LLM API)  (Python)    (Next.js)
┌───────────────────┐     ┌──────────────────┐     ┌──────────────┐
│    meloik         │     │ assetai_firebase │     │  stockSite   │
│                   │     │                  │     │              │
│  ・ニュース収集    │     │  ・MySQL →       │     │  ・予測結果   │
│  ・データ統合      │ ──► │    Firestore同期  │ ──► │    表示      │
│  ・LLM予測実行    │     │  ・差分更新      │     │  ・日英対応   │
│  ・翻訳処理       │     │  ・コスト最適化   │     │              │
│                   │     │                  │     │              │
└───────────────────┘     └──────────────────┘     └──────────────┘
  VPS (PHP/MySQL)           VPS (Python)          Vercel (Next.js)

3つのサブシステムが連携し、ニュースの発信から予測結果の表示まで、すべて自動で動作します。


技術的な挑戦

Challenge 1: 自分だけのLLMを作る — ファインチューニングの試行錯誤

千里眼の中核は、株価予測に特化したLLMです。汎用のLLMでは精度が出ないため、独自のデータセットで追加学習(ファインチューニング)を行いました。

しかし、最適な方法にたどり着くまでに、3つのフェーズを経ています。

フェーズ環境モデル結果
1. ローカルGPURTX 3060 (6GB)ELYZA Llama-3-JP-8BVRAM不足で学習不可
2. Google ColabT4 GPU (15GB)ELYZA, LLM-jp, rinna精度不足・学習時間が長い
3. OpenAI APIクラウドgpt-4o-mini成功 — 8分で学習完了

Phase 1(ローカル) では、手元のノートPCのGPU(6GB)で8Bパラメータのモデルを学習しようとしましたが、メモリ不足で断念。推論(AIに質問すること)は動きましたが、学習には推論の数倍のメモリが必要でした。

Phase 2(Google Colab) では、LoRA(Low-Rank Adaptation)という軽量化技術を使い、3つのオープンソースモデルで試行錯誤しました。メモリ制限のためにデータを大幅に削る必要があり、精度が出ませんでした。ただし、この過程で「LLMに新しい知識を学習させることは可能」という確信を得ました。

Phase 3(OpenAI API) で方針を転換。OpenAIのファインチューニングAPIを使うことで、5種類のデータをすべて入力でき、わずか8分で学習が完了しました。1,009件の独自データセットで訓練した結果、実用的な精度の予測モデルが完成しました。

Challenge 2: 多言語対応 — 翻訳LLMの選定

千里眼は日本語と英語の両方でサービスを提供しています。翻訳処理にもLLMを使用していますが、プロバイダの選定で苦労がありました。

当初はコストの安さからDeepSeekを採用しましたが、以下の問題が発生しました。

  • 処理速度: レスポンスに数分かかり、タイムアウトが頻発
  • 言語混入: 日→英翻訳の出力に中国語が混ざる
  • データ漏洩: 入力データの一部をそのまま出力してしまう

最終的にすべてのLLM処理をOpenAI(ChatGPT)に統一することで、品質と安定性の問題を解決しました。

学び: LLMプロバイダは、コストだけでなく品質・安定性・言語対応を総合的に評価する必要があります。

Challenge 3: MySQL → Firestore移行

バックエンドのMySQLからフロントエンド用のFirestore(NoSQLデータベース)へのデータ同期でも、RDBとNoSQLの設計思想の違いに苦労しました。

  • インデックス設計: MySQLでは当然の複合インデックスが、Firestoreでは1つずつ手動で作成する必要がある
  • データの重複書き込み防止: Firestoreは書き込み課金のため、UNIXタイムスタンプによる差分更新の仕組みを自作
  • コスト最適化: 不要な同期処理の停止やキャッシュ戦略の調整で、Firebase利用コストを削減

技術スタック

レイヤー技術役割
AI予測OpenAI gpt-4o-mini (Fine-tuned)株価変動予測
予測理由生成OpenAI gpt-5-nanoニュース分析・理由テキスト生成
翻訳・要約OpenAI gpt-5-mini日→英翻訳、ニュース要約
バックエンドPHP / MySQLデータ収集・統合・バッチ処理
データ同期Python / FirestoreMySQL→Firestoreの差分更新
フロントエンドNext.js / VercelWeb UI(ISR、日英対応)
インフラさくらVPS × 2バッチ処理・データ同期サーバー

検証した技術

ファインチューニングの過程で、以下の技術を実際に試行・検証しました。

技術概要使用した場面
LoRA全パラメータではなく低ランク差分のみを学習する軽量化手法Colab上での3モデルの学習
8bit量子化モデルの精度を保ちつつメモリ使用量を半減させる技術ローカル・Colabでのモデルロード
QLoRA量子化 + LoRA の組み合わせColabでの実質的な学習手法
GGUF変換HuggingFaceモデルをCPU推論可能な形式に変換ローカルでの推論テスト
SFTTrainerHuggingFace TRLライブラリの教師ありファインチューニングツールColabでの学習実行

訓練データの設計

独自に構築した訓練データセットの特徴です。

項目
データ件数1,009件
トークン数約130万トークン
データ構造5種類のデータを1つのJSONに統合
正解ラベル翌日の実際の株価変動率(3種類)
対象市場東証プライム・スタンダード・グロース

ニュースやIR情報の出典としては「適時開示情報閲覧サービス(TDnet)」など、企業が公的に発表した情報をもとにしています。正確な情報は必ず原典をご確認ください。


開発プロセスの詳細

本プロジェクトの開発過程を、全8回の連載記事で詳しく解説しています。

テーマ
第1回きっかけと全体像
第2回ローカルGPUでの挑戦と挫折
第3回LoRAと量子化の技術解説
第4回Google Colabで株価予測に挑む
第5回OpenAI APIファインチューニング
第6回訓練データの設計
第7回翻訳LLMの選定 — DeepSeekからChatGPTへ
第8回MySQL→Firestore移行と本番運用

学んだこと

データの質がモデルの性能を決める

3つのオープンソースモデルと1つの商用モデル、計4つのアプローチを試した結果、最も重要だったのは「モデルの大きさ」ではなく「入力データの質と量」でした。Colabで情報を削って学習させたモデルより、OpenAI APIでフルデータを入力したモデルの方が圧倒的に精度が高かったのです。

個人開発でもLLMファインチューニングは実現可能

ファインチューニングは大企業だけのものではありません。OpenAI APIを使えば、1,009件のデータセットで、約8分、数ドルのコストで独自モデルを構築できます。重要なのは、質の良い訓練データを準備することです。

LLMプロバイダは総合的に評価する

コストだけで選ぶと、品質面で後から問題が出ます。特に多言語処理では、モデルの学習データの言語バランスが出力品質に直結します。安定性・品質・コストのバランスを見極めることが重要です。


免責事項

本サービスの予測結果は、LLMによる自動生成であり、投資助言ではありません。投資判断はご自身の責任で行ってください。ニュースやIR情報の出典としては「適時開示情報閲覧サービス(TDnet)」など企業が公的に発表した情報をもとにしています。正確な情報は必ず原典をご確認ください。

この記事をシェア