インタビュー記録を証拠として符号化し最初の顧客層を選ぶ
目標
インタビュー記録から、質問の形の偏りをふるい落とし、「最近経験して、対価を払った」証拠だけを数えて、標本サイズを反映した区間で、最初の顧客層を選びます。
なぜ重要なのか
人は、他人のアイデアに礼儀正しく答えます。誘導・仮定の質問への答えや、褒め言葉を需要として読むと、存在しない市場に数か月を費やします。記録を証拠として符号化し、標本のサイズまで考慮する習慣が、作る前の検証のすべてです。
用意するもの: /opt/fixtures/founder/problem/interviews.csv
id,segment,question_style,said_problem,days_since_last,workaround,spent_krw_month,commitment
- segment: freelance_designer・inhouse_marketer・small_agency
- question_style: past・hypothetical・leading
- said_problem: 問題があると言ったか(0/1)、days_since_last: 最後に経験してから何日か(言わなかったなら空欄)
- spent_krw_month: いまその問題に毎月使っているお金、commitment: none・compliment・followup・pilot・preorder
定義
- 使えるインタビュー: question_style == "past"。
- 最近の問題: said_problem == 1で、days_since_last ≤ 30。
- 対価: spent_krw_month > 0、またはcommitmentがpilot・preorder。
- 証拠: 使えるインタビューのうち、最近の問題で、対価があるもの。
- ウィルソン95%区間: z =
NormalDist().inv_cdf(0.975)、p = k/nのとき、中心 = (p + z²/2n)/(1 + z²/n)、半幅 = z·√(p(1−p)/n + z²/4n²)/(1 + z²/n)。 - 比率は、小数第4位まで。
ステップ
/root/founder/problem/counts.jsonに、セグメントごとにall(インタビュー数)とby_style(past・hypothetical・leading別の数)を書く。/root/founder/problem/said.jsonに、セグメントごとにsaid_all_rate(すべてのインタビューのsaid_problemの比率)とsaid_usable_rate(使えるインタビューだけ)を書く。/root/founder/problem/problem.pyに、evidence(row)(csv.DictReaderの1行 → True/False)を作る。/root/founder/problem/evidence.jsonに、セグメントごとにusable・evidence・rate(evidence ÷ usable)を書く。/root/founder/problem/signals.jsonに、セグメントごとにmedian_spend(使えて、最近の問題があり、お金を使っている人の月の支出の中央値。なければ0)、strong(使えるインタビューのpilot・preorderの数)、compliments(すべてのインタビューのcomplimentの数)を書く。problem.pyに、wilson(k, n)→[low, high]を加える(nが0なら[0.0, 1.0])。/root/founder/problem/ranking.jsonに、by_said_all(said_all_rateが最も高いセグメント)、by_point(証拠の比率が最も高いセグメント)、by_lower_bound(証拠のウィルソン下限が最も高いセグメント)、lower_bounds(セグメント → 下限)を書く。/root/founder/problem/decision.jsonに、target(by_lower_bound)、need_more(下限 < 0.5 ≤ 上限のセグメント、ソート済み)、drop(上限 < 0.5のセグメント、ソート済み)を書く。
参考
csv.DictReaderは、値をすべて文字列として渡します。空のdays_since_lastは""です。- よくある間違い: 誘導・仮定の質問への答えを証拠に入れること、褒め言葉を約束として数えること、境界(30日)を未満にすること、点推定で小さな標本を選ぶことです。
誰にどんな質問をしたか
/root/founder/problem/counts.jsonに、セグメントごとにallとby_style(past・hypothetical・leading)を書く。
csv.DictReaderで読み、segmentとquestion_styleで数えます。セグメントごとに、質問の形の比重が違うかどうかを見てください。
質問の形が答えを膨らませる
/root/founder/problem/said.jsonに、セグメントごとにsaid_all_rateとsaid_usable_rateを書く。
分子はsaid_problem == "1"のインタビューで、分母は、前者はそのセグメント全体、後者はquestion_styleがpastのインタビューです。
証拠の条件を関数にする
/root/founder/problem/problem.pyに、evidence(row)を作る(過去の質問・最近30日以内に経験・お金、またはパイロット・事前注文)。
3つの条件をすべて満たしたときだけTrueです。空のdays_since_lastは、intに変える前に除外してください。30日は含みます。
セグメント別の証拠
/root/founder/problem/evidence.jsonに、セグメントごとにusable・evidence・rateを書く。
分母は、使える(past)インタビューの数です。インタビューの総数では割りません。
お金と約束、そして褒め言葉
/root/founder/problem/signals.jsonに、セグメントごとにmedian_spend・strong・complimentsを書く。
median_spendの対象は、使えて、最近の問題があり、支出が0より大きい人です(なければ0)。complimentsは、質問の形と無関係に数えます。
小さな標本を区間にする
problem.pyに、wilson(k, n) → [low, high]を加える。
zはNormalDist().inv_cdf(0.975)です。ラボの案内の中心と半幅の式を、そのまま写してください。n=0なら[0.0, 1.0]です。
3つの順位
/root/founder/problem/ranking.jsonに、by_said_all・by_point・by_lower_bound・lower_boundsを書く。
同じ記録で、3回並べます。すべての答えの「問題あり」の比率、証拠の比率(点推定)、証拠のウィルソン下限です。
最初の顧客層と、次のインタビュー
/root/founder/problem/decision.jsonに、target・need_more・dropを書く。
区間が0.5をまたぐなら、まだ分からないもの(need_more)、上限さえ0.5を下回るなら、畳むもの(drop)です。