ChatGPTとPythonで日本株スクリーニングを自動化する実践手順

投資戦略
スポンサーリンク
【DMM FX】入金

スクリーニングを自動化する意味

日本株の銘柄選びで最も時間を奪うのは、実は「買うかどうかの判断」そのものではありません。決算短信を読む前、チャートを見る前、事業内容を調べる前に、上場企業数千社の中から候補を絞り込む作業が必要になります。ここを感覚でやると、話題株、SNSで流れてきた銘柄、直近で大きく上がった銘柄ばかりに目が行きます。結果として、すでに織り込み済みの銘柄を後追いする確率が高くなります。

ChatGPTとPythonを組み合わせる価値は、銘柄を当ててもらうことではありません。価値があるのは、投資家自身の仮説を「毎回同じ条件で検査できる形」に落とし込める点です。たとえば「営業利益率が改善していて、自己資本比率が高く、出来高が増えている銘柄を探したい」という考えがあるなら、その条件をPythonで数値化し、ChatGPTで条件の整理、コードの骨格作成、例外処理の洗い出しを行う。これにより、属人的な思いつきではなく、再現性のあるスクリーニングに変えられます。

重要なのは、AIに投資判断を丸投げしないことです。ChatGPTは会話形式で条件整理やコードレビュー、分析観点の追加に使えます。OpenAIの公式ヘルプでも、ChatGPTはアップロードされたデータの分析、表やグラフの作成、構造化されたデータの確認に使えると説明されています。つまり、投資家側がデータと判断軸を用意すれば、作業効率を大きく引き上げられるということです。

自動化の全体像

日本株スクリーニング自動化は、難しく考える必要はありません。全体は大きく五つの工程に分かれます。第一に、どのデータを使うかを決める。第二に、銘柄コード、企業名、業種、時価総額、売上高、営業利益、PER、PBR、配当利回り、出来高などを表形式に整える。第三に、投資仮説に合う条件式を作る。第四に、条件を満たした銘柄を点数化して順位付けする。第五に、抽出結果を人間が確認する。この流れを一度作れば、毎週、毎月、決算シーズンごとに同じ型で回せます。

自動化という言葉を聞くと、リアルタイムで株価を取得し、売買まで自動執行するようなものを想像しがちです。しかし個人投資家が最初に作るべきなのは、売買自動化ではなく「調査対象リストの自動作成」です。売買判断は最後まで人間が担い、Pythonは候補抽出に徹する。この切り分けが実務的です。

たとえば毎週末に株価データと財務データを更新し、条件に合う20銘柄だけを抽出する仕組みを作るとします。そこから各社の決算資料、事業内容、受注環境、株主構成、チャート形状を確認する。数千社から20社に絞るだけで、分析時間の密度は大きく変わります。勝率を上げるというより、無駄な調査を減らし、継続的に市場を観察できる体制を作るのが目的です。

最初に決めるべき投資仮説

スクリーニングで失敗する人の典型は、指標を詰め込みすぎることです。PERが低く、PBRが低く、ROEが高く、増収増益で、配当利回りが高く、チャートも強く、財務も安全という条件を同時に入れると、ほとんど銘柄が残らないか、残ったとしても市場がすでに評価している無難な大型株ばかりになります。条件は多ければよいわけではありません。

最初に決めるべきなのは、自分が狙う非効率性です。たとえば以下のような仮説です。「市場は短期的な減益を嫌うが、構造的な収益改善を過小評価しやすい」「小型株では出来高が少ない時期に業績改善が始まり、注目される前に株価が動き出す」「PBR1倍割れ企業の中には、資本効率改善策が出た後に評価が変わるものがある」。このような仮説があって初めて、使う指標が決まります。

たとえば「収益性改善株」を探すなら、PERよりも営業利益率の前年差、売上高成長率、粗利率、販管費率、営業キャッシュフローの改善を重視します。「資産バリュー株」を探すなら、PBR、ネットキャッシュ比率、自己資本比率、政策保有株の有無、土地含み益の可能性などを見ます。「モメンタム株」を探すなら、年初来高値、移動平均線、出来高変化率、相対強度を優先します。仮説が違えば、同じ銘柄でも評価は変わります。

データ項目の設計

Pythonで扱うデータは、最初から完璧である必要はありません。ただし、最低限の列設計は必要です。基本列として、銘柄コード、企業名、市場区分、業種、株価、時価総額、発行済株式数を用意します。財務列として、売上高、営業利益、経常利益、純利益、営業利益率、自己資本比率、ROE、ROA、営業キャッシュフロー、フリーキャッシュフローを用意します。バリュエーション列として、PER、PBR、配当利回り、EV/EBITDAを入れます。需給・株価列として、出来高、25日平均出来高、出来高変化率、年初来高値からの乖離率、200日移動平均線からの乖離率などを入れます。

ここで大切なのは、データの粒度をそろえることです。株価は日次、財務は四半期または年次、予想値は会社予想やコンセンサスなど、時間軸が異なります。株価だけ毎日更新しても、財務データが古ければ判断の前提がズレます。逆に、長期投資の候補抽出なら株価の1日単位の変化は重要度が低く、四半期ごとの更新でも十分な場合があります。

スクリーニング用のCSVには、できれば「データ更新日」も列として入れておくべきです。後から見返したとき、どの時点のデータで抽出したのかが分からないと検証できません。投資の自動化で最も危険なのは、数字が正しそうに見えるのに、実は古い、欠損している、単位が違う、分割調整されていないという状態です。Pythonは間違ったデータでも高速に処理してしまうため、データ品質の確認が必須になります。

ChatGPTに任せる作業と任せない作業

ChatGPTは便利ですが、すべてを任せる道具ではありません。向いている作業は、条件の整理、コードの雛形作成、エラー原因の推定、分析観点の提案、出力形式の改善、コメント追加、関数化、例外処理の確認です。たとえば「PER15倍以下、営業利益率10%以上、自己資本比率50%以上、出来高が25日平均の2倍以上の銘柄を抽出するPythonコードを書いて」と指示すれば、基本的なpandasコードの骨格を作れます。

一方で、ChatGPTに任せない方がよい作業もあります。最新データの正確性確認、銘柄の最終判断、企業固有の重要事実の断定、短期的な株価予測、売買タイミングの決定です。AIの出力は、必ずデータソースと照合する必要があります。特に個別株では、決算修正、増資、TOB、上場廃止リスク、訴訟、会計処理、主要顧客の変化など、数値スクリーニングだけでは拾えない要素があります。

実務では、ChatGPTを「優秀な補助者」として使うのが最も効果的です。自分が考えた条件を説明し、抜け漏れを指摘させる。Pythonコードを書かせたら、自分で小さなサンプルデータを作って挙動を確認する。ランキング結果が出たら、なぜその銘柄が上位に来たのかを分解する。こうした使い方なら、投資判断の主導権を保ちながら、作業負荷を減らせます。

Pythonで作る基本スクリーニング

最もシンプルな形は、CSVを読み込み、条件でフィルタリングし、スコアを付けて保存するだけです。たとえば列に「sales_growth」「op_margin」「equity_ratio」「per」「volume_ratio」があるとします。この場合、売上成長率が5%以上、営業利益率が8%以上、自己資本比率が40%以上、PERが30倍以下、出来高変化率が1.5倍以上という条件を設定できます。条件を満たす銘柄だけを残し、営業利益率、売上成長率、出来高変化率に重みを付けて点数化します。

ここで注意すべきは、単純な条件だけでは偏りが出ることです。PERが低い銘柄には、成長性が低い、景気敏感、特別利益で一時的に利益が膨らんだ、構造不況業種である、といった理由がある場合があります。営業利益率が高い銘柄も、単年度だけの改善か、価格改定や製品ミックス改善による構造的な改善かで意味が違います。したがって、Pythonで最初に抽出する条件は「買う条件」ではなく「詳しく調べる条件」と考えるべきです。

実践的には、フィルターを二段階に分けると精度が上がります。第一段階では広めに拾います。たとえば時価総額50億円以上、赤字ではない、自己資本比率30%以上、売買代金が最低限ある、という安全確認をします。第二段階で、狙うテーマに応じて営業利益率改善、売上成長、ROIC改善、出来高増加、年初来高値更新などを点数化します。最初から厳しく絞りすぎるより、広く拾って点数で並べる方が、候補の比較がしやすくなります。

スコアリングの考え方

銘柄を順位付けするには、スコアリングが有効です。ただし、スコアリングは絶対的な正解ではありません。あくまで調査順を決めるための仕組みです。たとえば成長株スクリーニングなら、売上成長率30点、営業利益率改善30点、出来高変化率20点、株価モメンタム20点という配点にします。バリュー株なら、ネットキャッシュ比率30点、PBR20点、自己資本比率20点、フリーキャッシュフロー20点、株主還元姿勢10点といった形です。

スコアリングで重要なのは、指標の単位をそろえることです。売上成長率はパーセント、時価総額は円、出来高は株数、PERは倍率です。そのまま足し合わせると意味がありません。Pythonでは、各指標を順位化したり、標準化したり、上下限を設けたりして点数化します。たとえば売上成長率が高いほど点数を上げる一方、異常値を避けるために上限を設けます。営業利益率も100%に近い異常値がある場合、単純に高評価するとノイズになります。

個人投資家にとって扱いやすいのは、順位スコアです。全銘柄の中で売上成長率が上位20%なら高得点、営業利益率改善が上位20%なら高得点、出来高変化率が上位20%なら高得点というように、相対順位で評価します。これなら業種や規模の違いをある程度ならせます。ただし金融、REIT、赤字バイオ、特殊な持株会社などは指標の意味が異なるため、必要に応じて除外または別枠で扱います。

具体例:収益性改善株を探す

ここでは具体例として、収益性改善株を探すケースを考えます。狙いは、売上が急拡大している派手な成長株ではなく、地味だが利益率が改善し始めた企業です。市場は売上成長には反応しやすい一方、原価率改善、価格転嫁、販管費抑制、事業ポートフォリオ変更による利益率改善を見落とすことがあります。この遅れを狙うのが仮説です。

条件は次のように設計できます。売上高成長率はマイナスでないこと。営業利益率が前年同期比で2ポイント以上改善していること。営業利益が黒字であること。営業キャッシュフローがプラスであること。自己資本比率が40%以上であること。時価総額は小さすぎると流動性リスクが高いため、たとえば50億円以上にします。出来高は直近25日平均売買代金で最低ラインを設定します。

この条件で抽出された銘柄は、すぐに買うのではなく、改善の理由を確認します。価格改定が浸透したのか、原材料価格が下がっただけなのか、不採算事業を撤退したのか、為替の追い風なのか、会計上の一時要因なのか。ここを確認しないと、単なる一過性の利益改善を構造変化と誤認します。Pythonは「変化が起きた企業」を見つける道具であり、「変化の質」を判断するのは人間の仕事です。

具体例:モメンタムと財務を組み合わせる

次に、株価モメンタムと財務を組み合わせる方法です。年初来高値を更新している銘柄は、強い買い需要がある可能性があります。しかし、チャートだけで買うと、短期の材料で急騰しただけの銘柄や、過熱感の強い銘柄をつかむ危険があります。そこで、財務条件を加えます。

たとえば、年初来高値からの乖離率が5%以内、200日移動平均線より上、直近出来高が25日平均の1.5倍以上、営業利益が黒字、売上高が前年同期比プラス、自己資本比率30%以上という条件を設定します。これにより、株価が強く、かつ最低限の財務健全性がある銘柄に絞れます。

この戦略のポイントは、上がっている理由を後から確認することです。好決算、上方修正、新製品、受注拡大、業界再編、株主還元、アクティビスト、テーマ性など、理由はさまざまです。理由が説明できない上昇は、短期資金だけで動いている可能性があります。逆に、業績変化と需給変化が同時に起きているなら、継続的に監視する価値があります。

ChatGPTへの指示文テンプレート

ChatGPTを使うときは、曖昧な指示を避ける必要があります。「良い銘柄を探して」では実用的な結果は出ません。代わりに、目的、入力データの列名、条件、出力形式、注意点を明確に伝えます。たとえば次のような指示です。

「日本株スクリーニング用のCSVがあります。列はcode、name、sector、market_cap、sales_growth、op_margin、op_margin_change、equity_ratio、per、pbr、volume_ratioです。営業利益率改善株を探すため、営業利益率が5%以上、営業利益率前年差が2ポイント以上、自己資本比率40%以上、PER40倍以下、出来高変化率1.2倍以上の銘柄を抽出し、op_margin_change、sales_growth、volume_ratioを使ってスコアを作るPythonコードを書いてください。欠損値がある場合は除外し、結果をscore順に並べてCSV保存してください。」

このように具体化すると、ChatGPTはコード化しやすくなります。さらに「各処理にコメントを付けてください」「異常値対策として上下1%をクリップしてください」「金融業を除外してください」「出力列はcode、name、sector、score、各指標にしてください」と追加すれば、実務に近づきます。ChatGPTは一回で完璧なコードを作るというより、対話しながら条件を磨く道具として使うのが効率的です。

よくある失敗と対策

第一の失敗は、欠損値を無視することです。財務データには空欄や異常値が混じります。PERが空欄の企業、営業利益率が計算できない企業、出来高が極端に少ない企業をそのまま処理すると、ランキングが歪みます。Pythonでは、欠損値を除外する、中央値で補完する、業種ごとに処理するなどの方針を明確にします。投資スクリーニングでは、安易な補完よりも、重要指標が欠けている銘柄を除外する方が実務的な場合が多いです。

第二の失敗は、過剰最適化です。過去の株価に合わせて条件を調整しすぎると、バックテストでは良く見えても将来は機能しません。たとえば「PER12倍以下、PBR0.8倍以下、営業利益率7%以上、出来高変化率1.7倍以上、RSI52以下」のように細かすぎる条件は、過去の偶然に合わせている可能性があります。条件はできるだけ経済的な意味が説明できるものに限定すべきです。

第三の失敗は、抽出結果を過信することです。スクリーニングで上位に来た銘柄でも、決算短信を読むと在庫が膨らんでいる、売掛金が増えすぎている、主力顧客依存が高い、設備投資負担が重い、増資リスクがある、といった問題が見つかることがあります。スクリーニングは入口であり、出口ではありません。

検証の仕組みを作る

自動化の本当の価値は、検証できることにあります。毎回同じ条件で抽出し、その後の株価推移や決算内容を記録すれば、自分の仮説がどの程度機能しているか確認できます。たとえば、毎月1日に抽出した上位20銘柄について、1カ月後、3カ月後、6カ月後の騰落率、TOPIX比、最大下落率を記録します。これを続けると、感覚ではなくデータで戦略を評価できます。

検証では、勝率だけを見るのは不十分です。平均リターン、中央値リターン、最大損失、上位銘柄への偏り、業種偏り、時価総額偏りも確認します。勝率が高くても、たまに大きく負ける戦略は実運用に向きません。逆に勝率が低くても、損失が小さく利益が大きい戦略なら候補になります。

Pythonでは、抽出日、銘柄コード、スコア、株価、後日の株価を保存しておけば、検証用データベースを作れます。最初はExcelやCSVで十分です。重要なのは、都合のよい成功例だけを記憶しないことです。失敗した抽出結果も残すことで、条件の弱点が見えてきます。

実運用で使えるワークフロー

実際に運用するなら、週次と月次で役割を分けると続けやすくなります。週次では、株価、出来高、年初来高値、移動平均線、売買代金などの市場データを更新し、モメンタムや需給変化を確認します。月次では、財務データ、業績予想、配当、自己資本比率、キャッシュフローなどを更新し、企業の質を確認します。決算シーズン中は、決算発表後の数値を反映して別枠で抽出します。

出力は、単なる銘柄リストではなく、調査しやすい形にします。銘柄コード、企業名、業種、スコア、スコア内訳、時価総額、主要指標、抽出理由を並べます。抽出理由が空欄だと、後で見たときに判断できません。「営業利益率改善」「出来高増加」「年初来高値接近」「ネットキャッシュ高い」など、理由を短く残します。

さらに、候補銘柄を三段階に分類すると実務的です。Aランクはすぐに決算資料を読む銘柄、Bランクは監視リストに入れる銘柄、Cランクは条件は満たすが流動性や業種特性に注意が必要な銘柄です。この分類はPythonの点数だけでなく、人間の確認を加えて行います。自動抽出と人間の定性判断を組み合わせることで、機械的すぎる判断を避けられます。

個人投資家にとっての優位性

機関投資家は高度なデータベースや専用端末を使っています。個人投資家が同じ土俵で情報量を競うのは現実的ではありません。しかし、個人投資家には小型株、流動性の低い銘柄、短期的に注目されていない銘柄をじっくり調べられる強みがあります。ChatGPTとPythonは、この強みを伸ばす道具になります。

特に日本株では、地味なBtoB企業、地方のニッチトップ企業、時価総額の小さい黒字企業、資本効率改善に動き始めた企業など、まだ広く注目されていない候補が存在します。人力だけで探すと膨大な時間がかかりますが、スクリーニングを自動化すれば、毎回同じ条件で市場全体を見渡せます。

自動化の目的は、楽をして答えを得ることではありません。むしろ逆です。候補抽出を効率化し、浮いた時間を決算資料の読み込み、事業理解、競争優位性の確認、リスク分析に振り向けることです。投資の成果を左右するのは、最終的には解釈力です。Pythonは候補を拾い、ChatGPTは作業を補助し、投資家は判断する。この役割分担が最も実用的です。

小さく始めて改善する

最初から高度なシステムを作る必要はありません。まずはCSVを一つ用意し、10個程度の指標でスクリーニングするところから始めれば十分です。最初の目標は、完璧な銘柄選定ではなく、毎回同じ条件で候補を出せる状態を作ることです。そこから、欠損値処理、業種別ランキング、スコア内訳、検証用ログ、グラフ化、定期実行へと少しずつ拡張します。

実務では、シンプルな仕組みほど長続きします。毎週30分でデータを更新し、上位20銘柄を見る。気になる銘柄だけ決算資料を読む。翌月、抽出結果を検証する。このサイクルを続けるだけでも、銘柄選びの精度は変わります。何より、自分がどのような条件の銘柄に反応しやすいのか、どの条件が失敗しやすいのかが見えてきます。

ChatGPTとPythonを使った日本株スクリーニングは、個人投資家にとって現実的な武器になります。ただし、武器になるのは、データを盲信する人ではなく、仮説を持ち、検証し、改善できる人です。自動化は判断力を代替するものではなく、判断力を発揮するための前処理です。数千社を眺める作業から解放され、見るべき企業に時間を使えるようになること。そこに最大の価値があります。

p-nuts

お金稼ぎの現場で役立つ「投資の地図」を描くブログを運営しているサラリーマン兼業個人投資家の”p-nuts”と申します。株式・FX・暗号資産からデリバティブやオルタナティブ投資まで、複雑な理論をわかりやすく噛み砕き、再現性のある戦略と“なぜそうなるか”を丁寧に解説します。読んだらすぐ実践できること、そして迷った投資家が次の一歩を踏み出せることを大切にしています。

p-nutsをフォローする
投資戦略
スポンサーリンク
【DMM FX】入金
シェアする
p-nutsをフォローする

コメント

タイトルとURLをコピーしました