(更新: 2026.03.21)

アカウント自動判定のロジックと精度向上

アカウント自動判定のロジックと精度向上

「明日14時にMTG」と投げたとき、クロスリンクのカレンダーに入れるべきか、プログラミングスクールのカレンダーに入れるべきかを自動判定する仕組みを作った。

最初はミスが多かったけど、改善を重ねて判定精度90%以上まで向上させた。

判定ロジック v1.0(初期版)

最初はシンプルなキーワードマッチング。

const detectAccount = (text) => {
  if (/クロスリンク|SEO|ブログ|求人/.test(text)) {
    return 'crosslink';
  }
  if (/プログラミング|スクール|関西|東海/.test(text)) {
    return 'programming_school';
  }
  return 'crosslink'; // デフォルト
};

問題点

  • 「求人原稿の打ち合わせ」→ クロスリンク ✅
  • 「体験会」→ デフォルトでクロスリンク ❌(プログラミングスクールのはず)

キーワードが含まれていないと誤判定が起きる。

判定ロジック v2.0(スコアリング方式)

複数のキーワードにスコアを付けて、合計点で判定。

const detectAccount = (text) => {
  let crosslinkScore = 0;
  let programmingScore = 0;

  // クロスリンク系キーワード
  if (/クロスリンク|SEO|ブログ|求人|eラーニング/.test(text)) crosslinkScore += 10;
  if (/森田|嶋津|大平/.test(text)) crosslinkScore += 5;

  // プログラミングスクール系キーワード
  if (/プログラミング|スクール|体験会|シフト|座席表/.test(text)) programmingScore += 10;
  if (/関西|東海|ココグラム|名古屋/.test(text)) programmingScore += 5;

  return programmingScore > crosslinkScore ? 'programming_school' : 'crosslink';
};

精度向上

  • 「体験会」→ プログラミングスクール ✅
  • 「SEO記事の打ち合わせ」→ クロスリンク ✅

でもまだ誤判定が残る。

判定ロジック v3.0(文脈理解)

AIに文脈を判定させる。

const detectAccount = async (text) => {
  const prompt = `
以下のタスクはどちらのアカウントに関連していますか?

タスク: ${text}

アカウント:
- crosslink: 株式会社クロスリンク(SEO記事、eラーニング、求人関連)
- programming_school: プログラミングスクール(体験会、シフト、座席表、関西・東海・名古屋)

回答は "crosslink" または "programming_school" のみ。
`;

  const response = await ai.analyze(prompt);
  return response.trim();
};

結果

  • 精度が90%以上に向上
  • キーワードが含まれていなくても、文脈から正しく判定できる

実際の判定例

タスク 判定結果 正解
明日14時にMTG crosslink
体験会シフト作成 programming_school
SEO記事レビュー crosslink
座席表作成 programming_school
石井さんと打ち合わせ crosslink
久保社長に連絡 programming_school

まとめ

アカウント自動判定は、キーワード → スコアリング → AI判定と段階的に改善。

最終的にはAIに任せるのが一番正確で、メンテナンスも楽。

タグ: #AI活用 #自動化 #精度向上