本文へスキップ
hdknr blog
戻る

シクリカルバリュー株投資とは — 赤字の底で仕込む手法と、DTWで類似局面を探すクオンツ的アプローチ

シクリカルバリュー株投資とは、景気の波で赤字と黒字を繰り返す景気敏感株(シクリカル株)を、赤字のどん底で買い、黒字転換とともに評価が戻ったところで売る投資手法です。2025 年後半あたりから、証券会社のメディアや note でこの言葉をよく見かけるようになりました。きっかけの一つは、たーちゃん氏の書籍『50万円を50億円に増やした 投資家の父から娘への教え』(ダイヤモンド社、2025 年 7 月)です。

言葉にすると単純ですが、実際には入口も出口もかなり難しい手法でもあります。この記事では、これを次の 3 つの層に分解して整理します。

  1. 構造 — なぜ「劇的な V 字回復」が起きるのか(オペレーティング・レバレッジ)
  2. 判断 — 何を見て仕込み、何を見て売るのか(指標とサイクルのフェーズ)
  3. 自動化 — サイクルの局面判定をアルゴリズムに落とすとどうなるか(DTW による類似局面抽出)

なお以下では、正式名称の「シクリカルバリュー株投資」を「シクリカルバリュー投資」と略します。

本記事は投資手法の技術的な整理であり、投資助言ではありません。特定の銘柄・商品の売買を推奨するものでもありません。投資判断はご自身の責任でお願いします。

前提:バリュー株投資の中でどこに位置するのか

たーちゃん氏の分類では、株は大きく 4 タイプに分かれます。

タイプ別名何を買っているか主戦場
成長株グロース株将来の高成長成長ストーリー
業績安定株収益バリュー株稼ぐ力が株価に反映されていない状態P/L・C/F
業績低迷株資産バリュー株持ち物が株価より高い状態B/S
景気循環株シクリカルバリュー株業績の底からの回復景気サイクルそのもの

(P/L: 損益計算書、C/F: キャッシュフロー計算書、B/S: 貸借対照表)

たーちゃん氏自身の言葉を借りると、シクリカルバリュー投資は「本来収益バリュー株くらいの成長ポテンシャルのある銘柄を、資産バリュー株くらい割安で買う投資法」です。収益バリューと資産バリューのいいとこ取りを狙う、という位置づけになります。

なお、バリューとグロースのどちらが優位かは超長期で入れ替わります。三井住友 DS アセットマネジメントの資料が、MSCI World のバリュー指数とグロース指数の相対株価を 1974 年末から追っていて分かりやすいです。

期間優位背景
1974/12 末〜2006/12 末バリュー景気と企業業績の拡大、GAFAM の世界的台頭。30 年以上続いた
2006/12 末〜2020/8 末グロース2007 年以降の世界経済の低成長・低金利
2020/8 末〜2022/12 末バリューが反発コロナ後の経済活動正常化と長期金利の上昇
2023 年以降グロース米欧の利下げと堅調な企業業績のもと、大型ハイテク株が牽引

「バリューが常に勝つ」という話ではありません。

構造:V 字回復の正体はオペレーティング・レバレッジ

シクリカル株の魅力と怖さは、同じ 1 つの構造から来ています。**オペレーティング・レバレッジ(営業レバレッジ)**です。

設備や人員といった固定費の比率が高いビジネスでは、売上が少し増えるだけで利益が急拡大し、少し落ちるだけで一気に赤字に転落します。損益分岐点の周辺で、利益の変化率が売上の変化率を大きく上回るわけです。

数字にすると分かりやすいので、固定費 700・変動費率 40% のモデル企業で試してみます。

FIXED_COST = 700       # 固定費:減価償却・人件費・地代など
VARIABLE_RATIO = 0.40  # 変動費率:原材料費・仕入原価など

def operating_profit(revenue: float) -> float:
    return revenue - FIXED_COST - revenue * VARIABLE_RATIO

# 損益分岐点売上 = 固定費 / 限界利益率
break_even = FIXED_COST / (1 - VARIABLE_RATIO)
print(f"損益分岐点売上: {break_even:.0f}")  # → 1167

for revenue in (800, 1000, 1200, 1400, 1600):
    print(f"売上 {revenue:>5} → 営業利益 {operating_profit(revenue):>6.0f}")
損益分岐点売上: 1167
売上   800 → 営業利益   -220
売上  1000 → 営業利益   -100
売上  1200 → 営業利益     20
売上  1400 → 営業利益    140
売上  1600 → 営業利益    260

売上が 800 から 1600 へ 2 倍になる間に、営業利益は -220 から +260 へ動きます。マイナスからプラスへ符号が変わるため、変化率という尺度そのものが壊れてしまう。これが「どん底からの V 字回復」が数字上ドラマチックに見える理由です。

逆に言えば、この構造は下向きにも同じだけ効きます。売上が損益分岐点を少し割り込むだけで、決算は一気に真っ赤になります。シクリカル株を「安いから」という理由だけで買うと、この下向きのレバレッジに巻き込まれます。

つまりシクリカルバリュー投資の狙いは、売上・数量が戻り始めたがまだオペレーティング・レバレッジが利益に効いてくる前に仕込むことです。

判断:シクリカル株をどこで買い、どこで売るか

前提:「一時的な不況」と「構造不況」を分ける

シクリカルバリュー投資で最大のリスクは、サイクルだと思って買った業界が、実は構造的に沈んでいるケースです。この 2 つを分けるフィルターは、突き詰めると次の 2 点になります。

この手法が鉄鋼・非鉄金属・ガラス・紙・海運・化学・エネルギーといった古典的産業に集中しがちなのは、偶然ではありません。技術革新のスピードが比較的遅く、プレイヤーの顔ぶれも変わりにくい業界を選ぶこと自体が、構造不況を弾くための一次フィルターとして働いています。

業種ごとの需給が構造的に変わりつつあるのか、循環の谷にいるだけなのかを判断する材料としては、みずほ産業調査の全 255 業種見通しを読む記事のような業種別のレポートが使えます。

銘柄の見つけ方:「同業他社が同時に赤字か」

たーちゃん氏の探し方は、判定条件としてシンプルです。

  1. ある 1 社の過去 10 年程度の業績推移を眺め、赤字と黒字を繰り返していないか確認する
  2. 繰り返していれば、同業他社 5 社程度の売上高の推移をチェックする
  3. すべての会社で赤字・黒字のタイミングがほぼ同時期に訪れていれば、それは業界のサイクルである

個社の経営ミスや不祥事で赤字になっている会社と、業界全体の景気循環で赤字になっている会社は、まったく別物です。前者は待っても戻りませんが、後者は業界が回復すれば一緒に戻ります。「同時性」がこの 2 つを切り分ける識別子になっています。

そして仕込みのタイミングとしては「2 年連続赤字」くらいがベスト、というのがたーちゃん氏の経験則です。「いまは赤字で危ないと言われているけれど、生き残ることはできる」と判断できる企業を、無配のうちに買っておく。将来高利回りになる株を、無配のときに買う——というのがこの手法の本質です。

なお「生き残れるか」の判定は財務の話になります。自己資本比率や有利子負債の水準をどう見るかは、会社四季報で財務をチェックする 7 つのポイントの観点がそのまま使えます。

景気サイクルの 4 フェーズと仕込み・売りゾーン

景気サイクルの4フェーズと、シクリカルバリュー株の仕込みゾーン(後退期〜不況期)・売りゾーン(回復期後半〜好況期)の位置関係を示した図

図の通り、王道は後退期から不況期で仕込み、回復期後半から好況期で売るという流れです。

実務上とくに効くのが、図の下部にある「回復は数量 → 価格 → 売上高の順に効いてくる」という順序です。まず出荷量・稼働率といった数量指標が戻り、次にそれが価格に転嫁され、最後に売上高として決算に表れます。この順番を知っていれば、決算の数字に出る前の段階で先読みができます。

指標:PER の罠と、赤字企業に使える PSR・EV/EBITDA

指標使い方注意点
PER(株価収益率)過去の平均 PER と比較する景気後退期は利益が減るので PER が高く出る。逆にピーク時ほど PER は低く見える
PBR(株価純資産倍率)1 倍以下が割安の目安単体ではなく業界平均と比較する
EV/EBITDA(企業価値 ÷ 償却前営業利益)本業のキャッシュ創出力に対する割安度低いほど割安
PSR(株価売上高倍率)赤字企業に使える数少ない指標。0.5 倍以下が目安売上ベースなので利益の質は見えない

シクリカル株で PER を素直に読むと、判断を誤りやすくなります。ピークで最も割安に見え、ボトムで最も割高に見える——この反転こそがシクリカル株特有の罠です。だから赤字局面では PER を捨て、売上ベースの PSR や EV/EBITDA に軸足を移します。

もう一つ、この手法に固有の作業がコスト構造分析です。有価証券報告書から人件費・地代といった固定費と、原材料費・仕入原価・販売手数料といった変動費を切り分け、費用構造を把握します。前述のオペレーティング・レバレッジのモデルを、実際の企業の数字で組み立てる作業です。

たとえば造船株なら、次のように積み上げます。

ここまで計算できれば、目標 PER から逆算した株価が出せます。有価証券報告書を機械的に取ってくる部分は、EDINET の XBRL を Python で扱う手順で自動化できます。

なお、この手法では貸借対照表はあまり重視しません。資産バリュー投資とは正反対です。B/S は「現在の状況」しか映さないのに対して、シクリカルバリュー投資が買っているのは「赤字から黒字に転換する近未来」だからです。買い時の企業の B/S を見ると、まず間違いなく「これはヤバい」としか思えない状態になっています。

売り:PER をあらかじめ決めておく

資産バリューの売り時は「シナリオが崩れた時」、収益バリューは「成長ストーリーが終わった時」と、やや定性的です。それに対してシクリカルバリューの売り時は、もっと機械的に決められます。

逆算した PER から「PER がこの水準になったら売る」を、買う前に決めておく。 過去の景気サイクルで PER がどこまで上がったかを調べ、その水準に近づいたら売る。感情ではなく、事前に決めた数字で判断します。

補助的な観点として、配当性向は高くても 30% 程度までが望ましい、という指摘もあります。景気循環株は好況期に利益を貯めておかないと次の不況期を越えられないため、株主還元をやりすぎている会社はサイクルを生き残れない可能性がある、という理屈です。

出口:サイクル一巡には十年単位かかることがある

元フィデリティ投信の株式アナリストであるポール・サイ氏は、ダイヤモンド・ザイ・オンラインの記事(2026 年 2 月 4 日公開)で、自身の海運株での経験を書いています。

中国のスーパーサイクルが続くと判断して海運株に投資し、投資額の数倍のリターンを得ました。しかし最大の難所は「どこで降りるか」を自分で決めなければならないことだった、と振り返っています。2008 年頃のピークでなんとか利確できたものの、その後、海運株は長い冬に入り、実質的に底を打ったのは 2020 年前後。約 12 年の休眠期間です。

降りるのが 1 年遅れていたら、リターンは十数年凍結されていたことになります。入口も難しいが、出口の見極めはさらにアートに近く、サイクルが一巡するまでの時間は想像以上に長くなり得る——これがこの手法の現実的なリスクです。同じ「安く買って高く売る」でも、デイトレードとスイングトレードの時間軸とは桁が 2 つほど違う世界です。

だからこそ、ポートフォリオ全額でこの手法を真似するのは現実的ではない、という但し書きが必ず付きます。たーちゃん氏自身も大きなリスクを取る一方で、家族には分散投資を勧めているそうです。「どれだけ勉強してもリスクは消えない」「自分はリスクを取りたいが、家族に同じリスクは負わせない」という姿勢は、この手法の性質をよく表しています。

自動化:機械学習でサイクルの局面を判定する

ここまでは人間の目と手による判断でした。では「いま景気サイクルのどこにいるか」の部分だけでも機械に任せられないか、という発想が当然出てきます。

ニッセイアセットマネジメントのクオンツトピックス「機械学習の手法を活用しシクリカル株に投資(前編)」(No.28、2025 年 2 月 20 日号)が、まさにこれを検証していて面白い内容でした。

発想:過去の「似た波形」を探して、その先を見る

対象は半導体セクターです。半導体にはシリコンサイクルと呼ばれる約 4 年周期の景気サイクルがあり、世界半導体市場統計(WSTS)が公表する出荷額の前年比を見ると、およそ 4 年間隔で山谷が現れます。直近でこのサイクルがどう効いたかは、メモリ株の急落と物色の移り変わりを追った記事が具体例になります。

そこで、時系列の類似度を測る DTW という指標(後述)を使って、次のような戦略を組みます。

DTWによる類似局面抽出とスイッチング戦略のフロー図。半導体出荷額の直近48ヶ月に似た過去の局面を上位10パーセント抽出し、その翌月の超過リターンの平均でSOX指数とNASDAQ100を切り替える

ポイントは、未来を直接予測しようとしないことです。「いまの半導体出荷額の波形に似た過去の 48 ヶ月を探し、その直後に何が起きたかの平均を取る」という、事例ベースの推論に置き換えています。時系列そのものをモデルに予測させる基盤モデル(TimesFM など)のアプローチとは、発想がかなり違います。

DTW(動的時間伸縮法 / Dynamic Time Warping)とは

2 つの時系列の類似度を測るとき、単純にユークリッド距離を取ると「波形は似ているが位相が数ヶ月ずれている」ケースを取りこぼします。景気サイクルの比較では、これは致命的です。

DTW は 2 つの時系列の要素を非線形に対応づけながら距離を計算する指標で、位相がずれていても波形が似ていれば距離が小さくなるという性質があります。サンプル数の異なる時系列同士でも計算できます。

素の実装は動的計画法で 20 行程度です。

import numpy as np

def dtw_distance(a: np.ndarray, b: np.ndarray) -> float:
    """2つの時系列のDTW距離。小さいほど似ている。"""
    n, m = len(a), len(b)
    cost = np.full((n + 1, m + 1), np.inf)
    cost[0, 0] = 0.0
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            d = abs(a[i - 1] - b[j - 1])
            # 縦・横・斜めのいずれかから遷移してくる(=時間軸の伸縮を許す)
            cost[i, j] = d + min(cost[i - 1, j],      # b 側を引き伸ばす
                                 cost[i, j - 1],      # a 側を引き伸ばす
                                 cost[i - 1, j - 1])  # 1対1で対応
    return float(cost[n, m])

なお、この実装は累積コストをそのまま返すので、長さの違う系列を比べると短いほうが有利になります。今回は窓長を 48 ヶ月に固定しているため問題になりませんが、長さの異なる系列を比較する場合は経路長で割って正規化してください。

実務では既存ライブラリを使うほうが速いです(pip install tslearn dtaidistance)。

# window, target: 48ヶ月ぶんの前年比系列(np.ndarray)

# tslearn
from tslearn.metrics import dtw
d = dtw(window, target)

# dtaidistance(C 実装で高速。distance_fast は float64 の1次元配列が必須)
from dtaidistance import dtw as dtw_fast
d = dtw_fast.distance_fast(window.astype(np.double), target.astype(np.double))

ただし上の手書き実装は局所距離に絶対値差を使っており、これらのライブラリの既定(二乗差の累積の平方根)とは距離の定義が違います。**返る値はそのままでは一致しません。**順位づけにしか使わないなら実害はありませんが、閾値を絶対値で決める場合は注意してください。

類似局面の抽出

過去の系列から 48 ヶ月の窓を 1 ヶ月ずつずらして大量に切り出し、それぞれと現在の窓との DTW 距離を計算して、距離の小さい上位 10% を「類似局面」として採用します。

WINDOW = 48  # シリコンサイクル約4年ぶんの月次データ

def similar_phases(series: np.ndarray, target: np.ndarray,
                   top_ratio: float = 0.10) -> list[int]:
    """series 内の 48ヶ月窓のうち、target に近いものの開始インデックスを返す。
    series には「判断時点までに確定済みの履歴」だけを渡すこと。"""
    scored = []
    # 窓の「翌月リターン」が確定している範囲だけを候補にする
    for start in range(len(series) - WINDOW):
        window = series[start:start + WINDOW]
        scored.append((dtw_distance(window, target), start))

    scored.sort(key=lambda x: x[0])
    k = max(1, int(len(scored) * top_ratio))
    return [start for _, start in scored[:k]]


def expected_excess_return(series: np.ndarray, target: np.ndarray,
                           next_month_excess: np.ndarray) -> float:
    """類似局面の「翌月の超過リターン」の平均を期待値とする。
    next_month_excess[i] = 時点 i の翌月の SOX − NASDAQ100 超過リターン"""
    starts = similar_phases(series, target)
    return float(np.mean([next_month_excess[s + WINDOW] for s in starts]))

あとは毎月末にこれを計算し、期待超過リターンがプラスなら SOX 指数(米国の証券取引所に上場する半導体関連 30 社で構成)、0 以下なら NASDAQ100 に切り替えるだけです。

先読みバイアス(ルックアヘッドバイアス)を潰す

このタイプのバックテストで最も壊れやすいのが、投資判断の時点で入手できなかったデータを使ってしまうことです。この検証では次の 2 点が手当てされています。

上のコードで range(len(series) - WINDOW) と末尾を 1 つ余らせているのは、窓の直後の月のリターンが確定していない期間を候補に入れないためです。ただしこれだけでは不十分で、series 自体に「判断時点までに確定済みの履歴」しか含まれていないことが前提になります。渡す配列の切り出し方を間違えると、未来を見たモデルが簡単にできあがります。

結果:ファンダメンタルデータは効いたが、株価チャートは効かなかった

検証では 2 つのモデルが比較されています(2009 年 12 月末を起点、ドル建て配当込み)。

モデル類似度を測る対象結果
ファンダメンタルモデルWSTS の半導体出荷額(前年比)SOX・NASDAQ100 のいずれよりも高いリターン
株価モデルSOX 指数自身のチャート元の 2 指数よりもパフォーマンスが劣後

同じ DTW・同じ類似局面抽出のロジックで、入力を出荷額にするか株価にするかだけで結果が逆転したという点が示唆的です。

レポートは、株価指数の変動には景気サイクル以外の要素——株式自体の需給、半導体市場以外の外部環境——が多く混入するため、将来のリターン予測に使いにくいのだろう、と推測しています。

これは前半で見た人間側の判断と、きれいに符合します。人間のシクリカルバリュー投資家が、株価チャートではなく同業他社の業績の同時性やコスト構造といった実体側のデータを見るのと、まったく同じ構図です。株価は結果であって、サイクルの状態そのものではありません。機械に置き換えても、その原則は変わらないということでしょう。株価と出来高からセクターローテーションを検知しようとする別のアプローチと読み比べると、この差が際立ちます。

なお、この手法は半導体に限らずサイクル性のある業界一般に適用可能とされており、個別株の銘柄選択への応用は同シリーズの後編(2025 年 3 月 21 日号)で扱われています。

手元で試すときのデータ

このロジックを再現する場合、必要なデータは 2 種類です。

対象業界を日本株に変えるなら、状態変数は前述の EDINET や業種統計から、指数の代わりに業種別 ETF を使う、といった置き換えになります。クロスマーケットで似た発想を扱った例としては、正則化 PCA で米国→日本の業種モメンタムを捉える記事もあります。

まとめ:シクリカルバリュー投資の 3 層整理

そして全体を通して一番重く効くのが、出口の難しさと時間軸の長さです。海運株のように底打ちまで 12 年かかることもあります。期待値を改善する努力はできても、勝率が 100% になることはありません。

エンジニア的に面白いのは、この手法が「ノイズの多い観測値(株価)ではなく、実体の状態変数(出荷額・稼働率・数量)を見る」という点で一貫していることです。人間がやっても機械にやらせても、同じ結論に着地しています。

参考



前の記事
グロース株・バリュー株・シクリカル株の違い — 銘柄分類5つの軸を1枚の地図にする
次の記事
株価が上昇に転じる兆候 — 銘柄分類別に見る先行指標