BtoB営業における企業のスコアリングは、このシステムの中で算術のように見えて、実際には天気予報のように振る舞う部分です。安く集められるシグナルはどれも、それぞれ特定の、記述可能な形で不正確です。そして有効な対応は、もっときれいな入力を探すことではなく、汚れた入力を、それぞれの壊れ方に応じて重み付けすることです。以下は、私たちが落ち着いた重み付けの方式と、各ルールの理由、そして出荷したのに全企業に同じ数字を返し、1週間ほど正常に動いているように見えたスコアラーの話です。
01安いシグナルは、それぞれの流儀で嘘をつく
読み取りとは、取得元が返した候補のことです。通過になる前にゲートを抜ける必要があり、ゲートには根拠が要ります。契約もカード登録もなしに手に入る根拠は、おおむね4種類あり、それぞれ名前を付けられる壊れ方をします。
- 求人は古びたまま公開され続けます。採用管理システムは滅多に整理されないので、1月に埋まった職種が6月にもまだ出ていることは珍しくなく、再掲載と初回掲載は区別できません。データエンジニアを3人採用中というのは、その求人を書いた時点の企業についての強い主張です。今日の企業についての主張としては弱いものです。
- 変更履歴は、書かないことで嘘をつきます。絶えず出荷していて何も書かないチームは休眠に見えます。マーケティング部門が変更履歴を持っているチームは、四半期に4件の記載で猛烈に働いているように見えます。変更履歴がないことは、エンジニアリングがあるかどうかについてほとんど何も語りません。
- 資金調達データは遅れて届きます。発表は着金日ではなく、着金はクロージングではなく、クロージングはたいてい公表の1四半期前です。ラウンドが公開データベースに現れる頃には、そのお金で決まる支出の判断は、すでに済んでいることが多い。
- 技術スタックの検出は、1ページ分の閲覧を報告しているだけです。マーケティングサイトで発火したタグは、製品について何も語りません。2年前に解約したベンダーの取り残されたタグは、先週更新した顧客のタグとまったく同じ説得力で発火します。
どれもシグナルを捨てる理由にはなりません。そのシグナルが何を測っているのかを正確にする理由になります。そして測っているものは、たいてい項目名が示唆するものではありません。job_posted_at という列が測っているのは、他社の採用管理システムでその行が最後に触られた時刻です。そう扱って重み付けすれば、再び使えるようになります。
二次的な問題は相関です。この4つのうち3つは、公開するという同じ行為の下流にあります。ですから活発なマーケティングチームを持つ企業はそのすべてを多く放出し、静かに出荷する企業は少なくしか放出しません。それらを足し合わせても、事業についての3つの視点は得られません。得られるのは広報予算についての1つの視点を3回数えたものであり、しかもそれは、最良の取引先になりやすい静かなエンジニアリング主導の企業を、系統的に見送らせます。
02BtoB営業でシグナルをどう重み付けするか
ルールは4つ。重要な順に並べます。
- 信頼できる時刻が付いたシグナルを優先します。コミット日時、リリースタグ、ドメインの登録記録、追加日を記録しているディレクトリの項目は、いずれも誰も推測せずに済む時刻を持っています。日付が推測であるものは、日付が事実であるものの数分の1の重みしか持ちません。日付のないシグナル4つより、日付のあるシグナル1つのほうを選びます。
- すべてを経過時間で減衰させます。ただし全体で1つの定数ではなく、シグナルの種類ごとの半減期を使います。資金調達はゆっくり重みを得て、1年ほど保ちます。求人は最初の3週間が最も価値があり、4か月を過ぎればほぼゼロです。この2つを同じ曲線に通すと、古い求人票が新しいものを上回ります。
- 単一のシグナルだけで企業を通過させることは絶対にしません。どれほど大きな入力であっても、1つで通過には届きません。独立した2つ以上の系統のシグナルが一致したときに、企業はゲートを抜けます。ここでの独立とは、同じ理由で両方とも間違うことがない、という意味です。ディレクトリの掲載2件は1つの系統です。ディレクトリの掲載と、公開リポジトリで読み込まれている競合SDKは、2つの系統です。
- シグナルがないことは、否定ではなく不明として扱います。スクレイピングのSDKを検出できなかったという主張と、この企業はスクレイピングをしていないという主張は別物であり、見えなかったものの多くは、どこを見たかの帰結です。欠けたシグナルは、分子からも分母からも外れます。
この4つ目のルールがあるので、ここでのスコアは1つではなく2つの数字になります。すべての企業がスコアと確信度を持ちます。欠けたシグナルは、発見のふりをせずに確実性だけを下げる必要があるからです。公開されている情報が薄い企業は、低いスコアではなく確信度の低いスコアになり、この2つは別々に扱われます。確信度が低ければ、もっとリサーチするために企業を差し戻します。スコアが低ければ、理由を文章で書いて見送り、台帳に載せます。この2つを1つの数字に潰すと、ブログを書かない事業をすべて、静かに落とすことになります。
03すべての企業に同じ答えを返したスコアラー
1週間ほど、私たちのスコアラーはバッチ内のすべての読み取りに、実質的に同じ値を返していました。壊れているようには見えませんでした。キューには順序があり、その順序は実行のあいだで安定していて、上位に来る企業はもっともらしく見えました。ディレクトリの取得元がたまたま先に返した企業で、その取得元は最大手に偏っていたからです。レビュー担当者は一覧を上から処理し、下書きを承認し、その体験のどこにも、スコアが何も仕事をしていないことを示すものはありませんでした。
原因はありふれたものでした。正規化の工程が、バッチの最大値で割る前に各要素を上限で切り詰めていて、その上限が低すぎたために、ほぼすべての入力が最初から上限に張り付いて到着していました。ほぼ同一の数値の列を、その列自身の最大値で割れば、1に近い数値の列が出てきます。算術はどこも正しい。出力は、末尾に丸め誤差の付いた定数でした。
見つけたのは分布を描いたときで、それまで一度も描いていませんでした。1本のスパイクがあり、その両側には何もない。作るのに4分のヒストグラムがあれば初日に捕まえられたはずで、誰も作らなかった理由は、一覧として眺めるかぎり順位付けが妥当に見えたからです。一覧は形を隠します。同じ値を並べた一覧も一覧であり、その順序は永久に保たれます。
より広い教訓は、もっともらしい成果物が実際には何を証明するのかという点です。順序の付いたキューは、何かが順序を作ったことの証拠です。それを作ったのがスコアラーであることの証拠ではありません。下流の利用側が独自の構造を課している場所ではどこでも、そしてキューは定義上、順序を課しますが、上流の計算を丸ごと失っても出力の形は変わりません。挿入順も、辞書順も、壊れたモデルも、すべて順位付きの一覧として現れます。
04スコアの材料にしないもの
説明できないインテントデータは買いません。これは到達できる範囲を狭めますが、その代償は受け入れています。
売り込みは見慣れたものです。あるベンダーが、自社カテゴリーに隣接するテーマで需要が高まっているとされる企業のフィードを売り、その出どころは概略でしか説明しません。シグナル自体は本物かもしれません。問題は、こちら側で反証できないことです。誰がどのページをいつ読んだのかも、その読者が購買判断の3フロア以内で働いているのかも、私たちには言えません。
それは私たちが依存している2つのものを壊します。見送り台帳は、見送ったすべての企業について文章の理由を記録しますが、理由は、それを読む人に確かめられるものでなければなりません。「第三者のフィードが否と言った」は理由ではなく、ブラックボックスの引用です。そしてレビュー画面は、各下書きを、それを書く材料になった根拠の隣に置きます。ですからそこに提示できない要素は、それに反論することが仕事のすべてであるレビュー担当者から、反論されようがありません。
根拠を示せないスコアには反論できず、誰も反論できないスコアは、気付かれるまで何か月も間違っています。これはあのフラットなスコアラーが、良いスーツを着て再登場しただけです。違いは、フラットなスコアラーはヒストグラムで捕まえられたのに対し、出どころが営業秘密である買ってきた数字を捕まえるヒストグラムは存在しない、という点です。
ですから重み付けは退屈なままにしてあります。信頼できる時刻、経過による減衰、通過の前に独立した2つの系統、そして不在は不在として記録すること。スコアはキューを並べ、それ以外は何もしません。窓口を開けることもなく、下書きを書くこともなく、まして、ノックを届けることはありません。すべてのメッセージは人が承認してから外へ出ますし、スコアは、その人が反対してよいものの1つです。