1
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?

除外フィルタが候補の7割を捨てていた ― 犯人はサイト自身の注意書きだった

1
Posted at

案件一覧から条件に合うものだけを拾うスクリプトを書いて、しばらく使っていました。

一覧を取得し、募集本文を開き、除外したい語が入っていたら落とす。よくある形です。除外語はこう置いていました。

x.ng = [
    /zoom|通話|面談/.test(body) && '面談',
    /サービス外連絡/.test(body)  && '外部連絡',
    /公式LINE/.test(body)        && 'LINE',
].filter(Boolean)

面談が要る案件は受けられない。外部での連絡を求めるものも受けられない。だから落とす。意図としては正しいはずでした。

通過率が低すぎることに気づいた

本文まで確認した245件のうち、条件を通ったのは22件でした。実測です。通過率9%。

最初は「条件が厳しいのだから、こんなものだろう」と思いました。実際、除外理由の内訳を出すまではそう思っていました。

外部連絡  173件
面談       64件
外部フォーム 12件
重複        8件
LINE        3件

外部連絡が173件。全体の70%です。ここで手が止まりました。7割が同じ理由で落ちるのは、条件が厳しいのではなく、条件の当て方が壊れている。

落ちた案件の本文を1件だけ開いた

該当した箇所を前後ごと出力しました。

...応募画面へ 気になる メッセージ MLMや購入代行など悪質な案件が増加しております
(詳細)。ご契約前後に関わらず、「サービス外連絡申請」の承認前に連絡先
(電話番号やメールアドレス、チャットIDなど)を聞かれた場合には、
お手数ですが辞退をお願いいたします...

募集者が書いた文ではありませんでした。サイトが全ページに出している注意書きです。

「サービス外連絡」という語は、それを禁止する側の警告文にこそ必ず入ります。私は、違反を警告する文言を、違反の証拠として数えていました。

同じことが「面談」でも起きていました。メッセージ欄の下に常時出ている案内文に、こう書かれていたからです。

要件説明の面談(ウェブ会議・電話連絡)など、やむを得ない事情がある場合は、
サービス外連絡申請を行い、事務局に承認を得てください

本文の切り出しが甘かった

原因はもう一つ手前にありました。本文をこう取っていました。

const i = t.indexOf('仕事の詳細');
const j = t.indexOf('この仕事の特徴');
const b = t.slice(i + 5, j > i ? j : i + 2600);

終端の目印が見つからないときは、開始から2,600字を機械的に取る。この保険が効いた案件では、募集本文を通り越してページ下部の定型文まで拾っていました。目印が無いページほど広く取る、という設計が、そのまま誤検出の量になっていました。

直し方

除外語を当てる前に、サイトの定型文を落とすだけです。

CW.clean = function (b) {
  return b
    .replace(/MLMや購入代行など悪質な案件が増加しております[\s\S]{0,400}?辞退をお願いいたします。?/g, ' ')
    .replace(/メッセージガイドラインに則り[\s\S]{0,300}?承認を得てください。?/g, ' ')
    .replace(/ご契約前後に関わらず[\s\S]{0,200}?承認を得てください。?/g, ' ');
};

同じ245件を、同じ条件で測り直しました。

修正前  通過 22件
修正後  通過 96件

実測です。4倍以上を取りこぼしていました。

念のため、修正後に残った「面談」64件も中身を確かめました。こちらは本物でした。「Zoomでのオンライン通話 60分」「来社インタビュー 場所:弊社オフィス」といった記述で、落として正しいものです。除外条件そのものは間違っていなかった、ということになります。

数えるまで気づけなかった

この不具合は、出力を見ているだけでは分かりませんでした。通過した22件はどれも条件に合っていたからです。誤検出は、偽陽性ではなく偽陰性として出ます。落とした側は画面に出ないので、正しく動いているように見えます。

気づけたのは、除外理由を件数で出したからでした。それ以外に手がかりはありませんでした。

一つの理由が全体の7割を占めていたら、その理由の中身を1件だけ開く。これだけで足ります。所要は数分でした。

残しておく教訓

禁止事項を検出する語は、禁止を告知する文にも入っている。

利用規約、注意書き、ガイドラインへの導線。この種の文はページの全件に出ます。だから誤検出も全件に出ます。「サービス外連絡」「面談」「直接契約」「勧誘」あたりを条件に使うなら、当てる前に定型文を落とす。

そして、フィルタを書いたら**通過率と除外理由の内訳を必ず出す。**片方だけでは足りません。通過率が低いことには理由がつけられてしまいますが、内訳の偏りには理由をつけにくいからです。

1
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
1
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?