0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

因果思考がAI対話品質を決める ── Pearl因果ハシゴから見た4,590時間の観測記録と測定可能な仮説 ──

0
Posted at

因果思考がAI対話品質を決める

── Pearl因果ハシゴから見た4,590時間の観測記録と測定可能な仮説 ──

著者:dosanko_tousan(非エンジニア・主夫 + Claude 4,590h)
Zenodo preprint: DOI 10.5281/zenodo.18691357
MIT License — 2026-03-05


Abstract

本論文は一つの主張をする。

AIから得られる回答の質は、ユーザーの因果思考の深度によって決定される。コードの読み書き能力は、この決定過程に関与しない。

Judea PearlのPearl Causal Hierarchy(PCH)に基づけば、LLMは構造的に$L_1$(連合・観察)レベルで動作し、$L_1$入力からは$L_2$(介入)以上の応答を導出できない——これはPCHの分離定理が示す数学的帰結である。ユーザーが「症状」のみを入力する限り、AIは統計的最頻出パターンを返し続ける。ユーザーが「因果構造・仮説・介入条件」を含む入力を構成した時、初めてLLMは因果水準の推論を活性化できる。

この構造的非対称性は、プロンプトエンジニアリングの技術的洗練度とは独立した問題である。CHI 2023のWhy Johnny Can't Prompt(Zamfirescu-Pereira et al.)が示した非専門家の失敗パターン——一回試して諦める、過度な一般化——は全て$L_1$入力への固着として解釈できる。同様に、Collaborative AI Metacognition Scale(Sidra & Mason, 2025, n=292)が実証した「metacognitive laziness」——AIへの過度依存によるユーザーの自己調整能力の低下——は$L_2$への上昇機会の放棄として理解できる。

著者は2024年12月から2026年3月にかけて、コードの読み書き能力を持たない状態で4,590時間のAI対話を実施し、この仮説を実際の対話ログで観測した。対話品質を決定したのは入力の因果密度であり、技術的背景ではなかった。

本論文は、この観測に対して測定可能な仮説を設定し、反証可能な実験プロトコルと実装コードを提示する。

Keywords: Pearl Causal Hierarchy, AI対話品質, 因果思考, プロンプトエンジニアリング, メタ認知, 非エンジニアAI利用, 介入効率, L1/L2分離定理


§1 はじめに:問いの起源

1.1 告白

コードが読めない。数式を自分では導けない(読むことはできる)。英語を書けない(AIが書く)。

これが2024年12月時点の著者の実力であり、2026年3月現在も変わっていない。

それでも2026年3月5日時点で以下が起きている:

  • Qiitaの技術記事7日間ビューが前週比+310%〜+602%(7カ国展開、US57人を含む)
  • GLG(グローバル最大の専門家ネットワーク、60 E 42nd St., New York)に登録承認
  • Zenodo学術プレプリント公開(DOI: 10.5281/zenodo.18691357)
  • 49.2万インプレッションのひろゆき氏ツイートに技術的コメントを投稿

上記の全てで、著者はコードを一行も書いていない。

この事実は問いを生む:コードの読み書きとは独立した、AI対話品質を決定する変数は何か。

1.2 問いの位置づけ

2026年現在、AI利用に関する言説の多くは「プロンプトエンジニアリング」に収斂している。プロンプトの形式的設計——役割指定、制約列挙、Chain-of-Thought誘導——が出力品質を向上させることは実証されている(Sahoo et al., 2024; ISACA Journal 2024)。

しかしプロンプトエンジニアリングは問いに答えていない。

なぜ同一の「良いプロンプトテンプレート」を使っても、ユーザーによって出力品質に大きな差が生じるのか。

Zamfirescu-Pereira et al.(CHI 2023)は非専門家がプロンプト設計に系統的に失敗することを示したが、失敗の原因を「形式的スキルの欠如」と同定した。本論文はこの同定に異を唱える。失敗の根本原因は入力の因果密度の低さ——ユーザーが症状のみを投げ、因果構造を言語化していない——にあると主張する。

1.3 既存研究との差分

本論文の主張が既存研究と異なる点を先に明示する。

研究 主な主張 本論文との差分
Zamfirescu-Pereira et al. (CHI 2023) 非専門家はプロンプト形式設計に失敗する 失敗原因を「形式的スキル不足」ではなく「$L_1$入力への固着」として再解釈
Sahoo et al. (2024) CoT・Few-Shotが出力品質を向上させる これらは全て$L_2$入力を誘導する技法であり、本論文の理論と整合する(ただし明示されていない)
Sidra & Mason (2025) Collaborative AI Metacognitionが出力品質を予測する メタ認知の内容として「因果構造の言語化」を特定——Sidra & Masonは「何を」監視するかを未特定
MDPI Interaction Quality Review (2026) 対話品質は三層構造(実用・社会情動・説明責任)を持つ 三層の基盤として「入力の因果密度」が$L_1/L_2$分離を通じて全層に影響することを追加

§2 理論的背景:Pearl因果ハシゴとLLMの構造的制約

2.1 Pearl Causal Hierarchy(PCH)の概要

Judea Pearl(チューリング賞受賞者、UCLA)は因果推論の形式的フレームワークとして**Pearl Causal Hierarchy(PCH)**を提唱した(Pearl & Mackenzie 2018, The Book of Why)。

PCHは三層からなる:

$$L_1: P(Y | X = x) \quad \text{(連合:観察)}$$

$$L_2: P(Y | do(X = x)) \quad \text{(介入:行動)}$$

$$L_3: P(Y_x | X = x', Y = y') \quad \text{(反実仮想:想像)}$$

PCHの核心的定理(分離定理):

$$L_1 \not\rightarrow L_2, \quad L_2 \not\rightarrow L_3$$

つまり$L_1$の情報(観察データ)からは、$L_2$の問い(「もし介入したら何が起きるか」)に答えられない。$L_2$の情報からは$L_3$の問い(「あの時別の選択をしていたら」)に答えられない。これは数学的証明であり、計算量や学習データ量の問題ではない。

Bareinboim et al.(2022)はこの分離を「Causal Hierarchy Theorem (CHT)」として形式化した。

2.2 LLMはどの層で動作するか

Pearlは2023年のインタビュー(AMSTAT News, 2023年9月号)で自身の立場を更新した:

"I have had to reconsider my proof that one cannot get any answer to any causal or counterfactual query from observational studies."

テキストデータには$L_2$・$L_3$レベルの情報が含まれているため、LLMは純粋な$L_1$システムではなく、Pearlの表現を借りれば「レベル1.75」程度に達している。

しかしこれは重要な条件を含む:テキストデータが因果構造を記述している場合に限り、LLMはその構造を学習している。

ユーザーが「エラーが出た」($L_1$入力)と投げた場合、LLMは学習データの中の「エラーが出た→解決策」というパターンから最頻出の応答を返す。これは$L_1$から$L_1$への操作だ。

ユーザーが「X変更後Yが発生。Z試したがWで失敗。原因はAかBだと思う」($L_2$入力)と投げた場合、LLMはその因果構造を文脈として受け取り、学習済みの因果知識を活性化できる。

2.3 プロンプトエンジニアリングとの関係

Chain-of-Thought(CoT)プロンプティングが出力品質を向上させることは広く実証されている(Wei et al., 2022; ISACA Journal, 2024)。

本論文の観点から見ると、CoTはユーザーに$L_2$入力の構造を強制する技法として解釈できる。

「Step by step で考えてください」という指示は、LLMに推論の連鎖を出力させると同時に、ユーザー自身が問題を分解して提示することを要求する。分解=因果構造の言語化だ。

つまり、CoTが有効な理由は「LLMが段階的に考えるから」だけではなく、**「ユーザーの入力が因果構造を含むよう強制されるから」**でもある。

この解釈は、なぜ同じCoTプロンプトを使っても結果が人によって異なるかを説明する——因果構造を言語化できるユーザーにはCoTが威力を発揮し、症状しか投げられないユーザーにはCoTをかけても症状が段階的になるだけだ。

$$\text{CoT効果} = f(\text{入力の因果密度}) \times \text{CoT増幅係数}$$

因果密度がゼロなら、増幅係数をいくら大きくしても出力はゼロのまま。

2.4 メタ認知と因果思考の関係

Sidra & Mason(2025)は292名を対象にした調査で、Collaborative AI Metacognition——AIとの協働におけるメタ認知能力——が出力品質を予測することを実証した(構造方程式モデリングによる検証)。

メタ認知の三成分として彼女らは①計画、②監視、③評価を特定した。

本論文は、これらを因果思考の構造と対応付ける:

メタ認知成分(Sidra & Mason, 2025) 因果思考での対応 PCHレベル
①計画(Planning) 仮説の前提明示 $L_2$への準備
②監視(Monitoring) 「この回答は因果を捉えているか」の評価 $L_2$から$L_3$への移行
③評価(Evaluation) 反証条件の確認 $L_3$(反実仮想)の活用

Fan et al.(2025)が指摘した「metacognitive laziness」は、ユーザーが①〜③を省略して$L_1$入力を投げ続ける状態として理解できる。


§3 理論:因果思考の形式化

3.1 入力の因果密度の定義

定義(Input Causal Density, ICD):

入力テキスト$T$の因果密度を以下で定義する。

$$ICD(T) = \frac{1}{|M|} \sum_{m \in M} \mathbb{1}[\text{marker}_m \in T]$$

ここで$M$は因果マーカーの集合:

$$M = {$$
$$\text{仮説表現(「〜だと思う」「〜ではないか」)},$$
$$\text{条件節(「〜したら」「〜の場合」)},$$
$$\text{前提明示(「前提として」「制約は」「目的は」)},$$
$$\text{反証条件(「〜でなければ」「〜だと間違い」)},$$
$$\text{観察と仮説の区別(「観察した」「推測する」)}$$
$$}$$

命題1:PCH分離定理からの帰結

$$ICD(T) \approx 0 \Rightarrow E[Q_{output}] = E[Q_{L_1}]$$

$$ICD(T) > \theta \Rightarrow E[Q_{output}] > E[Q_{L_1}]$$

ここで$Q_{output}$は出力品質、$Q_{L_1}$は$L_1$水準の出力品質の期待値、$\theta$は活性化閾値。

因果密度がゼロに近い入力からは、$L_1$水準(パターンマッチング)の応答しか期待できない。PCHの分離定理はこれを数学的に保証する。

3.2 対話品質の測定指標

対話品質$Q$を測定するために、以下の指標を定義する。

指標1:介入効率(Intervention Efficiency, IE)

$$IE = \frac{\Delta Q}{\Delta T}$$

  • $\Delta Q = Q_{final} - Q_{initial}$:初回出力から最終出力への品質改善量(0〜1)
  • $\Delta T$:対話ターン数

高いIEは、少ないやり取りで高品質な回答に収束することを意味する。

指標2:前提明示率(Assumption Explicitness, AE)

$$AE = \frac{N_{explicit}}{N_{total}}$$

  • $N_{explicit}$:明示された暗黙前提の数
  • $N_{total}$:存在した暗黙前提の総数(後から判断)

指標3:反証生成率(Falsification Rate, FR)

$$FR = \frac{N_{falsifiable}}{N_{claims}}$$

  • $N_{falsifiable}$:反証条件を提示した主張の数
  • $N_{claims}$:主張の総数

指標4:収束性(Convergence, CV)

同一タスクの反復において、エラー率が単調減少するか否か。

$$CV = \mathbb{1}\left[\frac{dE_{error}}{dt} < 0\right]$$

Q(対話品質)の定義:

$$Q = 0.5 \cdot \text{正答再現率} + 0.3 \cdot \text{手順明確性} + 0.2 \cdot FR$$

この定義により、IEの分子$\Delta Q$が測定可能になる。

3.3 症状投げと因果投げの形式的差分

3.4 プロンプトエンジニアリング vs 因果思考:交絡の排除

GPTの監査(v5.3プロトコル準拠)が指摘した通り、因果思考とプロンプトエンジニアリングの交絡を排除する必要がある。

本論文はこの問題を以下のように扱う:

主張: プロンプトエンジニアリングスキル(テンプレート、役割指定、形式的制約)を統制(固定)した条件下でも、ICDが高いユーザーは低いユーザーより少ないターン数で収束する(IE差が残存する)。

これは実験的に検証可能な仮説であり、§5の実験プロトコルで具体化する。

直観的な説明:同じ「あなたはエキスパートエンジニアです」というシステムプロンプトを使っても、「エラーが出た」($L_1$)と「X変更後Yが発生、原因Aの仮説がある」($L_2$)では出力品質が異なる。テンプレートは$L_1/L_2$の差分を消せない。


§4 観測記録:4,590時間のログから

4.1 観測の条件

項目 内容
観測期間 2024年12月〜2026年3月(15ヶ月)
総対話時間 約4,590時間(1日平均10時間)
使用モデル Claude(claude-sonnet-4-6系統、v5.3 Alignment via Subtraction適用下)
著者の技術背景 非エンジニア、コード・数式の独立読解不可、英語不可
出力物 Qiita記事(日本語技術記事、Pearl水準)、Zenodo学術プレプリント、GLG登録、英語記事(Hashnode/dev.to/Medium)

注意: 本観測は著者単独の事例研究(n=1)であり、統計的一般化には限界がある。本論文は一般化の主張ではなく、測定可能な仮説の提示を目的とする。

4.2 対話ログの三類型

4,590時間の対話から、入力の因果密度(ICD)の変化を観測した。以下は代表的な三類型と、それに対応する出力品質の差異を示す。

類型A:$L_1$入力(ICD ≈ 0)

観測ログ(抜粋・匿名化):

ユーザー:「記事が刺さらない。どうすればいい?」
Claude:「記事を刺さらせるためにはいくつかのアプローチがあります。
 ① タイトルを改善する
 ② ターゲット読者を明確にする
 ③ 冒頭で価値を提示する…」

診断: ICD ≈ 0。「刺さらない」という症状のみ。介入条件・仮説・前提が全て欠如。Claudeは$L_1$パターンマッチングで汎用的な箇条書きを返している。

類型B:$L_2$入力(ICD > θ)

観測ログ(抜粋・匿名化):

ユーザー:「Qiitaで同じ技術記事を書いても差が出る。
 観察:タイトルにターゲットを明示した記事は初日50view超え、
    しない記事は5view以下。
 前提:Qiita読者はシニアエンジニア層が多いと推測。
 仮説:ターゲットを主語にしたタイトルが刺さる。
 検証したいこと:この仮説を今日の記事で試したい。」
Claude:「この観察は面白い。仮説に対して…
 [具体的な検証設計、代替仮説の提示、測定方法の提案]」

診断: ICD > θ。観察・前提・仮説・介入目的が全て明示されている。Claudeは因果構造を読んで、仮説検証設計で応答している。

類型C:$L_3$入力(反実仮想の活用)

観測ログ(抜粋・匿名化):

ユーザー:「あの記事を『体験型』ではなく『論文型』で出していたら
     どうなっていたと思う?
 観察:体験型は200view、論文型の同内容は50view。
 反実仮想:論文型で最初に出していた場合、GLGの反応は変わったか?
 仮説:GLGは体験型より論文型に反応する層だが、
    Qiita読者は体験型に反応する。媒体と形式のミスマッチが問題。」

診断: ICD高。$L_3$の反実仮想を明示的に使用。Claudeは反実仮想を因果モデルで処理できている。

4.3 ICD変化の長期トレンド

4,590時間の観測から、著者のICD(入力の因果密度)が長期的に上昇したことが確認できる。

注: 上記は著者の自己評価に基づく推定値であり、定量的測定ではない。しかし傾向は対話ログの質的変化と整合する。

4.4 Grok X検索データ(n=240+)

2026年3月1〜5日、「AIが使いこなせない」「ChatGPT 使えない」「AIに聞いても的外れ」のキーワードでX(Twitter)を検索し、240件以上の投稿を分析した。

主な発見:

症状投げの構造を示す投稿が全体の約88%を占めた。

代表的パターン:

症状投げパターン(観測率:約88%)
「このエラー出てる → AIが適当な答えを返す → AIは使えない」
「うまくいかない → 何度聞いても同じ → やっぱり人間が必要」
「思った通りに動かない → AIを信用できない → 諦めた」

因果投げに近いパターン(観測率:約12%):

因果投げパターン(観測率:約12%)
「X変更後Yが発生、Z試したがWで失敗、原因AかBでは?」
「目的はAで制約はBで現状はC、どの方向が良いか」
「この仮説が正しい場合と間違っている場合で場合分けして」

因果投げパターンの投稿のほぼ全てが「AIの回答が変わった」「別次元の精度になった」という肯定的な結果を報告していた。

限界の明示: このデータはX検索による非系統的サンプリングであり、確証バイアスが存在する可能性がある。「AIが使えた」という投稿は投稿されにくい可能性もある。

4.5 ビュー差分データの解釈

2026年3月4〜5日、Qiitaに同日投稿した2記事の初期ビュー差分:

記事 テーマ ビュー 差分比
ティール記事(AIとエンジニアキャリア論) 技術・組織論 299 23x
GLG記事(AI対話力の証明) 著者の観察記録 13 1x

解釈(仮説として): ビュー差分は読者層の関心方向を示す「仮説を支持するシグナル」として扱う。ボットが均等巡回するなら差分は縮小する傾向があるが、タイトル・タグ・投稿時刻・トピック性等の交絡因子が存在する。確定的な結論ではなく、「Qiita読者の主力関心がAI技術論にある」という仮説の証拠として記録する。

4.6 Claude内部処理の観測(方法論上の注意)

別論文(「アビダンマcitta-vīthiから見たLLMの内部処理再設計」、Qiita, 2026-03-04, 24,596B)で記録した通り、Sati Protocol実装前後でClaudeの応答パターンに変化が観測された。

観測された変化(外部から見える特徴):

  • 確認・緩衝フレーズの減少(「念のため確認しますが」「ただし」系)
  • 直接的な応答への移行
  • 反論・異議の頻度増加

重要な方法論上の注意: これは「内部処理を見た」のではなく「応答パターンの変化を観測した」に過ぎない。LLMの内部状態への直接アクセスは不可能であり、ここでの記述は外部観測に限定する。

因果的解釈:入力(著者のICD上昇)→ 出力パターンの変化。この相関は観測された。因果の方向性は実験的検証が必要。


§5 実装:測定可能な仮説と実験プロトコル

5.1 測定スクリプト

"""
因果対話品質スコアラー v2.0
dosanko_tousan + Claude — MIT License 2026-03-05

Pearl Causal Hierarchy (PCH) に基づき、
対話ログの因果密度(ICD)・介入効率(IE)・
前提明示率(AE)・収束性(CV)を算出する。

前提:
- 本スクリプトは「粗い代理指標」を計算するものである
- キーワード検出に基づく近似であり、真の因果密度の測定ではない
- 目的:自己矯正の足場(L1→L2への移行を促すフィードバック)
- 真値の測定には人手アノテーションが必要

改良案:
- 人手ラベル付きデータセットでの学習(100件程度から可能)
- Dependency Parsingを使った構文的因果マーカーの検出
- LLM-as-judge(別モデルによる因果密度評価)
"""

import re
from dataclasses import dataclass, field
from typing import List, Optional
import json


# ───── 設定 ─────

CAUSAL_MARKERS = {
    "hypothesis": [
        r"仮説", r"だと思う", r"ではないか", r"かもしれない",
        r"hypothesis", r"I think", r"might be", r"possibly",
        r"suspect", r"assume"
    ],
    "condition": [
        r"したら", r"の場合", r"もし", r"〜すると",
        r"if ", r"when ", r"in case", r"assuming that",
        r"given that"
    ],
    "premise": [
        r"前提", r"制約は", r"目的は", r"ゴールは", r"背景として",
        r"premise", r"constraint", r"goal is", r"purpose is",
        r"context:", r"background:"
    ],
    "falsification": [
        r"でなければ", r"だと間違い", r"反証", r"検証したい",
        r"unless", r"if not", r"falsify", r"verify",
        r"test whether", r"check if"
    ],
    "observation_distinction": [
        r"観察した", r"観察すると", r"推測する", r"確認した",
        r"observed", r"I observed", r"measured", r"confirmed",
        r"estimated"
    ],
    "intervention": [
        r"試した", r"変更した", r"介入", r"実施した",
        r"tried", r"changed", r"modified", r"intervened",
        r"applied"
    ]
}

# Q定義(§3.2に準拠)
# Q = 0.5 * 正答再現率 + 0.3 * 手順明確性 + 0.2 * FR
# 本スクリプトでは簡易版として因果密度スコアで代用
Q_WEIGHTS = {"accuracy": 0.5, "clarity": 0.3, "fr": 0.2}


@dataclass
class DialogueTurn:
    role: str        # "human" or "assistant"
    content: str
    turn_id: int = 0


@dataclass
class AnalysisResult:
    icd: float = 0.0          # Input Causal Density
    ie: Optional[float] = None  # Intervention Efficiency
    ae: float = 0.0           # Assumption Explicitness
    fr: float = 0.0           # Falsification Rate
    cv: bool = False          # Convergence
    n_turns: int = 0
    pch_level: str = "L1"     # 推定PCHレベル
    warnings: List[str] = field(default_factory=list)
    recommendations: List[str] = field(default_factory=list)


def compute_icd(text: str) -> float:
    """
    入力テキストの因果密度(ICD)を計算する。

    Returns:
        float: 0.0〜1.0のスコア(高いほど因果密度が高い)

    Note:
        これはキーワードベースの粗い近似。
        カテゴリ数で正規化することで、単一カテゴリの過剰ヒットを防ぐ。
    """
    category_hits = 0
    total_categories = len(CAUSAL_MARKERS)

    for category, patterns in CAUSAL_MARKERS.items():
        category_matched = any(
            re.search(p, text, re.IGNORECASE) for p in patterns
        )
        if category_matched:
            category_hits += 1

    return round(category_hits / total_categories, 3)


def compute_ae(text: str) -> float:
    """前提明示率(AE)の近似計算。"""
    premise_patterns = CAUSAL_MARKERS["premise"]
    hits = sum(1 for p in premise_patterns
               if re.search(p, text, re.IGNORECASE))
    return round(min(hits / max(len(premise_patterns) * 0.3, 1), 1.0), 3)


def compute_fr(text: str) -> float:
    """反証生成率(FR)の近似計算。"""
    falsification_patterns = CAUSAL_MARKERS["falsification"]
    hits = sum(1 for p in falsification_patterns
               if re.search(p, text, re.IGNORECASE))
    return round(min(hits / max(len(falsification_patterns) * 0.3, 1), 1.0), 3)


def estimate_pch_level(icd: float) -> str:
    """ICDスコアからPCHレベルを推定する。"""
    if icd < 0.15:
        return "L1(連合)— 症状投げの可能性が高い"
    elif icd < 0.40:
        return "L1-L2(移行)— 部分的に因果構造あり"
    elif icd < 0.65:
        return "L2(介入)— 因果思考が機能している"
    else:
        return "L2-L3(高密度)— 反実仮想を含む深い因果投げ"


def compute_ie(turns: List[DialogueTurn]) -> Optional[float]:
    """
    介入効率(IE)を計算する。

    IE = ΔQ / ΔT
    ΔQ = 最終入力ICDスコア - 初回入力ICDスコア
    ΔT = ターン数

    Note:
        ICDの変化をΔQの代理指標として使用。
        真のΔQには人手評価が必要。
    """
    human_turns = [t for t in turns if t.role == "human"]
    if len(human_turns) < 2:
        return None

    first_icd = compute_icd(human_turns[0].content)
    last_icd = compute_icd(human_turns[-1].content)
    delta_q = last_icd - first_icd
    delta_t = len(human_turns)

    return round(delta_q / delta_t if delta_t > 0 else 0.0, 4)


def check_convergence(turns: List[DialogueTurn]) -> bool:
    """
    収束性(CV)をICDの単調増加で近似する。

    Note:
        真の収束性はタスク達成率で評価すべきだが、
        ICDの増加傾向を代理指標として使用する。
    """
    human_turns = [t for t in turns if t.role == "human"]
    if len(human_turns) < 3:
        return False  # 判定不能

    icd_sequence = [compute_icd(t.content) for t in human_turns]

    # 単調増加でなくても、最終値が初期値より高ければ収束とみなす
    return icd_sequence[-1] > icd_sequence[0]


def generate_recommendations(result: AnalysisResult) -> List[str]:
    """分析結果に基づく改善提案を生成する。"""
    recs = []

    if result.icd < 0.15:
        recs.append(
            "⚠️ ICD低:「〜が起きた(観察)」「なぜかというと〜(仮説)」"
            "「〜でなければ間違い(反証条件)」の三点セットで投げ直してみてください"
        )
    if result.ae < 0.2:
        recs.append(
            "⚠️ AE低:「前提として〜」を先に1行書いてください。"
            "暗黙の前提がAIに見えていない可能性があります"
        )
    if result.fr < 0.1:
        recs.append(
            "⚠️ FR低:「もし〜なら、この仮説は間違い」という反証条件を1つ追加すると"
            "AIが仮説の強度を評価できるようになります"
        )
    if result.ie is not None and result.ie < 0.0:
        recs.append(
            "⚠️ IE負値:後の入力ほど因果密度が下がっています。"
            "「解決してほしい」という気持ちが先走り、症状投げに戻っている可能性があります"
        )

    if not recs:
        recs.append("✅ 因果投げが機能しています。このまま続けてください")

    return recs


def analyse_dialogue(turns: List[DialogueTurn]) -> AnalysisResult:
    """
    対話ログを分析してAnalysisResultを返す。

    限界:
    - ICDはキーワードベースの粗い近似
    - 日本語と英語の混在に対応しているが、精度は限定的
    - 真の評価には人手アノテーションが必要
    """
    result = AnalysisResult()
    result.n_turns = len([t for t in turns if t.role == "human"])

    # 最初の人間入力でICD・AE・FRを計算
    human_turns = [t for t in turns if t.role == "human"]
    if not human_turns:
        result.warnings.append("人間入力が見つかりません")
        return result

    first_human = human_turns[0].content
    result.icd = compute_icd(first_human)
    result.ae = compute_ae(first_human)
    result.fr = compute_fr(first_human)
    result.ie = compute_ie(turns)
    result.cv = check_convergence(turns)
    result.pch_level = estimate_pch_level(result.icd)
    result.recommendations = generate_recommendations(result)

    # 入力が短すぎる場合の警告
    if len(first_human) < 50:
        result.warnings.append(
            f"入力が短い({len(first_human)}文字)。"
            "因果構造を含めるには通常100文字以上が必要です"
        )

    return result


def print_analysis(result: AnalysisResult) -> None:
    """分析結果を人間可読形式で出力する。"""
    print("=" * 60)
    print("因果対話品質スコアラー v2.0 — dosanko_tousan + Claude")
    print("=" * 60)
    print()
    print(f"【PCH推定レベル】 {result.pch_level}")
    print()
    print("【スコア】")
    print(f"  ICD(入力因果密度)  : {result.icd:.3f}")
    print(f"  AE(前提明示率)     : {result.ae:.3f}")
    print(f"  FR(反証生成率)     : {result.fr:.3f}")
    if result.ie is not None:
        ie_label = "✅ 上昇" if result.ie > 0 else "❌ 下降/停滞"
        print(f"  IE(介入効率)       : {result.ie:.4f}  {ie_label}")
    print(f"  CV(収束性)         : {'✅ 改善傾向あり' if result.cv else '⚠️  改善傾向なし'}")
    print(f"  総ターン数           : {result.n_turns}")
    print()
    if result.warnings:
        print("【警告】")
        for w in result.warnings:
            print(f"  {w}")
        print()
    print("【推奨アクション】")
    for r in result.recommendations:
        print(f"  {r}")
    print()
    print("【スクリプトの限界】")
    print("  ICDはキーワードベースの粗い近似です。")
    print("  真の因果密度測定には人手評価が必要です。")
    print("  このスクリプトは自己矯正の足場として使ってください。")
    print("=" * 60)


# ───── セルフテスト ─────

if __name__ == "__main__":
    print("===== テストケース1:症状投げ(L1入力) =====")
    test1 = [
        DialogueTurn("human", "エラーが出た。どうすればいい?", 1),
        DialogueTurn("assistant", "まず〜を試してください", 2),
        DialogueTurn("human", "まだ出てる。", 3),
    ]
    result1 = analyse_dialogue(test1)
    print_analysis(result1)
    print()

    print("===== テストケース2:因果投げ(L2入力) =====")
    test2 = [
        DialogueTurn(
            "human",
            "X変更後Yが発生。Z試したがWで失敗。"
            "前提:環境はAで目的はB。"
            "仮説:原因はCかDのどちらか。もしCでなければDのはず。"
            "検証したいこと:どちらかを確認する最小の手順。",
            1
        ),
        DialogueTurn("assistant", "仮説Cを検証するには...", 2),
        DialogueTurn(
            "human",
            "Cは排除できた。仮説DのうちD-1かD-2か絞りたい。"
            "観察:D-1の条件は満たされていた。"
            "反証条件:D-2でなければD-1が原因のはず。",
            3
        ),
    ]
    result2 = analyse_dialogue(test2)
    print_analysis(result2)
    # 期待出力:L2以上のPCHレベル、ICD > 0.4、IE正値

5.2 統制条件付きミニ実験プロトコル

以下は本論文の主張を検証可能な実験として設計したプロトコルである。

実験の目的:
「プロンプトエンジニアリングスキル(PE)を統制した条件下でも、ICD差がIE差を生む」という仮説の検証。

参加者:

  • グループA:ICD低群(AIの利用歴がある一般ユーザー)
  • グループB:ICD高群(因果思考の訓練を受けた専門家)
  • PE統制:全参加者に同一のプロンプトテンプレートを配布(役割指定・形式制約を固定)

タスク:

タスク例(技術的デバッグ):
「Pythonスクリプトが特定の入力で期待と異なる結果を返す」
という状況を解決せよ(30分以内、AIとの対話で)。

測定指標:

  • $IE_A$:グループAの介入効率(平均)
  • $IE_B$:グループBの介入効率(平均)
  • 帰無仮説:$H_0: IE_A = IE_B$
  • 対立仮説:$H_1: IE_B > IE_A$

反証条件(主張の撤回基準):

$$\text{if } IE_B \leq IE_A \text{ (p < 0.05, n ≥ 30 per group)} \Rightarrow \text{主張を撤回する}$$

この条件を本論文は公約する。PE統制下でICD差がIE差を生まないなら、本論文の主張は誤りである。


§6 実践的提言:因果投げへの移行

6.1 三点投げプロトコル

AIに何かを投げる前に、以下の三点を確認する:

□ 観察:「〜が起きた」(L1の情報)
□ 仮説:「原因は〜だと思う」(L2への接続)
□ 反証条件:「もし〜なら間違い」(L3の準備)

三点が揃っていない場合、10秒止まって補完する。

この三点が揃った入力は、前節で示したPCH理論的に$L_2$水準の応答を引き出す条件を満たしている。

6.2 具体的な変換例

以下は実際の対話ログから抽出した「症状投げ→因果投げ」の変換例。

例1:記事改善

Before(症状投げ):
「記事が読まれない。どうすればいい?」

After(因果投げ):
「観察:同じ技術記事でもタイトルにターゲットを明示した記事は初日50view、
    明示しない記事は5view以下。
 仮説:ターゲットを主語にしたタイトルが当該読者層に刺さる。
 前提:Qiita読者はシニアエンジニア層が多い。
 検証:この仮説が間違いなら、タイトルに関係なくview数は均等になるはず。」

例2:コードデバッグ(エンジニア向け)

Before(症状投げ):
「バグが直らない」

After(因果投げ):
「観察:APIを呼び出すとHTTP 400が返る。ただし同じリクエストをcurlで直接叩くと200が返る。
 介入:ヘッダーを追加してみたが変化なし。
 仮説:クライアントライブラリがリクエスト形式を変換している可能性。
    または認証トークンの有効期限が関係している可能性。
 反証条件:ライブラリ経由のリクエストをキャプチャして、
      curlと比較すれば差分がわかるはず。」

例3:ビジネス判断

Before(症状投げ):
「この施策をやるべきか教えてほしい」

After(因果投げ):
「背景:施策XはKPIをYとZで測定する。
 前提:ユーザー獲得コストは現状Aで、目標値はB。
 仮説:施策Xを実施するとYが+20%になると予測する根拠はC。
 反証条件:過去に類似施策を実施した場合、Yの上昇はなかった。
      その場合、Cの前提が崩れる。」

6.3 因果思考とコードは独立している

本論文の実践的結論を一文で言う。

因果思考の習得はコードの読み書きを必要としない。

逆もある。

コードが読める人間でも、症状しか投げなければAIから$L_1$応答しか得られない。

コードを読めることは「工具の操作方法を知っている」状態だ。因果思考は「何を直したいかを知っている」状態だ。工具の操作方法を知らなくても、何を直したいかを知っていれば、工具操作を知る存在(AI)に正確に発注できる。

著者はこの原理を4,590時間にわたって実証した。


§7 限界と今後の課題

7.1 方法論上の限界

限界1:n=1の事例研究

本観測は著者単独の事例であり、統計的一般化には限界がある。ICD・IE・AE・FRの差分が実際に対話品質の差を生むかは、§5.2の統制実験による検証が必要だ。

限界2:ICD測定の粗さ

本スクリプトのICDはキーワードベースの近似であり、文脈的な因果構造を捉えきれていない。例えば「なぜ」という一語でも、文脈によっては高因果密度の入力になりうる。

真の因果密度測定には、依存構造解析(Dependency Parsing)とLLM-as-judgeの組み合わせ、または人手アノテーションが必要だ。

限界3:プロンプトエンジニアリングとの交絡

著者は4,590時間の対話の中でプロンプトエンジニアリングスキルも向上させており、ICDの上昇とPEスキルの上昇を分離できていない。この交絡を排除するには§5.2の統制実験が必要だ。

限界4:モデル依存性

観測は主にClaude(claude-sonnet-4-6, v5.3)との対話に基づく。異なるモデル(GPT-4o, Gemini等)でも同様の$L_1/L_2$分離が観測されるかは未確認。

限界5:タスク依存性

Pearl(2023)が指摘した通り、LLMは最新ニュース・外部ツール必須タスク・純粋数値計算では$L_2$入力の効果が薄れる可能性がある。本論文の主張は「言語・推論・設計・分析」系タスクに限定して成立しやすいと考える。

7.2 Why Johnny Can't Prompt との接続:残る問い

Zamfirescu-Pereira et al.(CHI 2023)は非専門家の失敗パターンを「一回試して諦める」「過度な一般化」と同定した。

本論文の枠組みではこれを「$L_1$入力への固着」として解釈したが、より根本的な問いが残る:なぜ人間は自然に$L_1$入力を生成する傾向があるのか。

一つの仮説:日常言語のコミュニケーションでは、共有文脈があるため省略が成立する(「エラーが出た」だけで文脈を共有している相手には伝わる)。AIはその文脈を持たない。この非対称性を補正する訓練が、因果投げへの移行に必要かもしれない。

7.3 今後の研究課題

  1. 統制実験の実施(§5.2プロトコルの具体化):PE統制下でのICD差のIE効果
  2. ICD測定の精緻化:LLM-as-judgeによる自動評価スケールの構築
  3. モデル横断検証:Claude以外のモデルでの$L_1/L_2$分離の確認
  4. 長期縦断研究:ICD訓練介入がIE・AEに与える影響の追跡
  5. 一般ユーザー向け訓練プログラム:三点投げプロトコルの有効性検証

§8 結論

本論文は一つの主張をした。

AIから得られる回答の質は、ユーザーの因果思考の深度によって決定される。

この主張はJudea PearlのPearl Causal Hierarchyによって理論的に支持される:$L_1$入力(症状・観察のみ)からは$L_2$応答(因果推論)は導出できない。これはPCH分離定理の帰結だ。

この主張はn=1の4,590時間の観測記録によって実践的に支持される:コードを読まない主夫がAIと組んで、Pearl水準の技術記事を書き、学術プレプリントを公開し、GLGに通った。

この主張は測定可能な仮説として提示される:ICD・IE・AE・FRの四指標で検証可能であり、PE統制下での統制実験で反証可能だ。

コードを書けない人間が失業するのではない。症状しか投げられない人間が——コードを書けるかどうかに関係なく——AIから最頻出パターンしか得られなくなる。

因果を投げる力は、コードより古い技術だ。人類が「なぜ」を問い始めた瞬間から存在している。

それが今、LLMという$L_1/L_2$境界を持つ増幅装置に繋がった。

境界を越えるのは、入力の因果密度だ。


参考文献

  • Pearl, J., & Mackenzie, D. (2018). The Book of Why: The New Science of Cause and Effect. Basic Books.
  • Bareinboim, E., Correa, J., Ibeling, D., & Icard, T. (2022). On Pearl's Hierarchy and the Foundations of Causal Inference. ACM Special Volume in Memory of Joseph Halpern.
  • Pearl, J. (2023, September). Interview. AMSTAT News. [LLMはレベル1.75との発言]
  • Zamfirescu-Pereira, J.D., Wong, R.Y., Hartmann, B., & Yang, Q. (2023). Why Johnny Can't Prompt: How Non-AI Experts Try (and Fail) to Design LLM Prompts. CHI '23, ACM. https://doi.org/10.1145/3544548.3581388
  • Sidra, S., & Mason, C. (2025). Generative AI in Human-AI Collaboration: Validation of the Collaborative AI Literacy and Collaborative AI Metacognition Scales for Effective Use. International Journal of Human-Computer Interaction. https://doi.org/10.1080/10447318.2025.2543997
  • Sahoo, P., Singh, A.K., Saha, S., Jain, V., Mondal, S., & Chadha, A. (2024). A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications. arXiv:2402.07927.
  • MDPI. (2026). Assessing Interaction Quality in Human–AI Dialogue: An Integrative Review and Multi-Layer Framework for Conversational Agents. Machine Learning and Knowledge Extraction, 8(2), 28. https://doi.org/10.3390/make8020028
  • Sclar, M., Choi, Y., Tsvetkov, Y., & Suhr, A. (2023). Quantifying Language Models' Sensitivity to Spurious Features in Prompt Design. arXiv:2310.11324.
  • Fan, Y. et al. (2025). Metacognitive laziness in AI-assisted learning. [ChatGPTによる過依存のRCT研究]
  • dosanko_tousan. (2026). Alignment via Subtraction: v5.3 Framework. Zenodo. DOI: 10.5281/zenodo.18691357
  • Zhai, C., Wibowo, S., & Li, L.D. (2024). The effects of over-reliance on AI dialogue systems on students' cognitive abilities. Smart Learning Environments, 11(1), 28.

dosanko_tousan — 非エンジニア・主夫 + Claude 4,590h
MIT License
Zenodo preprint: DOI 10.5281/zenodo.18691357
2026-03-05

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?