2
4

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プログラミングシリーズ 🐵💻 簡単なスパムメール判定AIを作ってみよう

Posted at

1. はじめに:なぜスパムメール判定がAI入門に最適なのか?

みなさん、メールボックスにこんな件名を見たことありませんか?

「あなたに高額報酬のチャンス!今すぐクリック!」

スパムメール(迷惑メール)は、日常生活の中で誰もが遭遇する“わかりやすい課題”です。そして、機械学習・AIを使って「これがスパムか否か?」を自動で判断する処理は、自然言語処理(NLP)や分類モデルの初歩としてぴったりです。

本記事では、Python + scikit-learn を使って、簡単なスパム判定AIを一緒に作ってみましょう!


2. スパム判定AIの全体像

スパム判定AIは、以下の流れで構成されます:

  1. データの準備(スパム・非スパムのラベル付きテキスト)
  2. 前処理(テキスト→数値への変換)
  3. モデルの学習(分類器の訓練)
  4. 評価と予測(新しいメールへの適用)

使う技術は以下の通り:

機能 使用ライブラリ
データ前処理 pandas, scikit-learn
単語ベクトル化 CountVectorizer / TfidfVectorizer
モデル Naive Bayes(ナイーブベイズ)
評価 精度, 適合率, 再現率

3. 実装:スパム判定AIを作ってみよう

3.1 必要なライブラリをインストール

pip install pandas scikit-learn

3.2 サンプルデータを用意(ダミーでもOK)

import pandas as pd

data = {
    'text': [
        '今すぐお金がもらえる!',
        '会議は15時からです。',
        '無料で稼げる方法はこちら',
        '明日の予定を確認してください',
        'あなたに特別なオファーがあります!',
        '資料を共有しましたのでご確認ください'
    ],
    'label': [1, 0, 1, 0, 1, 0]  # 1: スパム, 0: 正常メール
}

df = pd.DataFrame(data)

3.3 テキストをベクトル化(CountVectorizer)

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(df['text'])

3.4 モデルを訓練(Naive Bayes)

from sklearn.naive_bayes import MultinomialNB

y = df['label']
model = MultinomialNB()
model.fit(X, y)

3.5 新しいメールを予測!

test_mail = ['今すぐクリックで100万円!']
X_test = vectorizer.transform(test_mail)
prediction = model.predict(X_test)

print('スパム判定結果:', 'スパム' if prediction[0] == 1 else '正常')

4. 実務で役立つTIPS & よくある落とし穴

✅ 実務TIPS:

  • TfidfVectorizerを使うと、「よく使われる単語を抑えつつ、特徴的な単語を強調」できます。
  • モデル精度が低い場合は、StopWordsの除去n-gramの導入も検討しましょう。
  • scikit-learnのpipeline機能を使うと、前処理とモデルを一括管理できます。

❌ よくあるエラーと対策:

問題 原因 解決策
精度が異常に高い/低い データが偏っている データのバランス確認、クロスバリデーション導入
新しいデータで予測できない fit_transformをテストデータに使っている テストにはtransformのみ使うこと
UnicodeDecodeError データ読み込み時のエンコーディング encoding='utf-8' で指定する

5. 応用:もっと本格的なスパム判定を目指すなら?

より実用的なスパムフィルタを目指すなら、以下の拡張がオススメです:

  • 大規模な実データセット(例:SMS Spam Collection)
  • TfidfVectorizer + ロジスティック回帰モデルの組み合わせ
  • 日本語対応(MeCab + Janome + sklearn)
  • FlaskやFastAPIと組み合わせてWeb API化

6. まとめ:シンプルだけど“使える”AIを自分で作れる!

スパム判定は、単純なルールベースでは限界がありますが、AI(機械学習)を使うことで柔軟に対応可能です。しかも、Pythonとscikit-learnさえあれば自作できるのです!

✅ メリット:

  • 実データに近いタスクでNLPを学べる
  • 機械学習のパイプラインが体験できる
  • 少量データでも動かせるのでPoCに最適

⚠️ デメリット:

  • 小規模データでは過学習リスクあり
  • 日本語対応はひと工夫が必要

🚀 最後に

機械学習は「魔法」ではありませんが、「手順」を踏めば誰でも動くAIが作れます。
次回は、このスパム判定AIをWebアプリ化する方法も紹介予定です!

気になる方は、ぜひ「いいね」や「ストック」をお願いします 🙌
コメント・質問も大歓迎です!

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?