毎日のように届く迷惑メール、なんとか自動で分類できないかと思ったことはありませんか?
本記事では、Pythonを使って「スパムメール判定機」を作る方法を、初心者の方にもわかりやすく解説します。
機械学習の代表的なライブラリ「scikit-learn」を使い、メールの内容を自然言語処理で分析し、スパムかどうかを自動判定するプログラムを実装していきます。
「難しそう…」と感じるかもしれませんが、必要な部分はすべて丁寧に解説しているので安心してください。
この機会に、迷惑メールの自動振り分けAIを自作してみましょう!
スパム判定機とは?【目的と活用例】
✅結論
スパム判定機とは、メールの内容を分析して迷惑メールかどうかを分類するプログラムです。
✅理由
ネット社会では、詐欺や広告などの迷惑メールが日常的に届きます。手動で仕分けるのは非効率なので、AIによる自動判別が強く求められています。
✅具体例
例えば以下のような用途があります。
• メールサービスに組み込み、自動仕分けを行う
• 社内システムに導入し、セキュリティ対策とする
• LINEやSlackなどのチャットにも応用可能
✅ポイント
このように「人の手間を減らすため」の技術として、スパム判定は広く使われています。
Python環境の構築方法【初心者向け】
✅結論
Pythonと必要なライブラリをインストールするだけで、スパム判定機は簡単に始められます。
✅やり方
1. Pythonのインストール
公式サイト(https://www.python.org/)から最新版をダウンロードします。
2. 仮想環境を作成
python -m venv spamenv
source spamenv/bin/activate # Mac/Linux
spamenv\Scripts\activate # Windows
3. ライブラリのインストール
pip install pandas scikit-learn matplotlib
4. Jupyter Notebookの準備(必要に応じて)
pip install jupyterlab
✅補足
Jupyterを使うとコードの確認・実行がしやすくなります。初心者にもおすすめです。
データの準備と前処理【自然言語処理】
✅結論
スパム判定にはメールのテキストを処理するための自然言語処理(NLP)が必要です。
✅やること
• データセットの読み込み(例:SMS Spam Collection Dataset)
• 不要な記号や空白の除去
• 単語の出現頻度を数値に変換(Bag of Words)
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
df = pd.read_csv("spam.csv", encoding="latin-1")[["v1", "v2"]]
df.columns = ["label", "message"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(df["message"])
y = df["label"].map({"ham": 0, "spam": 1})
✅ポイント
自然言語処理で「文章を数字に変える」ことが、機械学習で扱うための第一歩になります。
モデルの学習と評価【機械学習の実装】
✅結論
scikit-learnの決定木やナイーブベイズを使えば、簡単に学習と評価が可能です。
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = MultinomialNB()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("正解率:", accuracy_score(y_test, y_pred))
✅ポイント
• 学習データとテストデータを分けることが大切です。
• 予測結果の正解率(精度)を確認して、性能を判断します。
実際にスパム判定を試してみる【予測】
✅結論
学習したモデルにメール本文を入力するだけで、「スパムかどうか」を判定できます。
msg = ["Congratulations! You've won a prize!"]
msg_vec = vectorizer.transform(msg)
print(model.predict(msg_vec)) # → [1](スパム)
✅ポイント
• 1がスパム、0が正常なメッセージを示しています。
• 実際のメール本文を複数入れて試すと、効果がよく分かります。
まとめ|今後の応用アイデア
✅要点
• Pythonとscikit-learnでスパムメール判定は実装可能
• NLPでテキストを数値に変換するのが肝
• モデルは精度90%以上を狙える
✅応用例
• LINEやSNSのスパム検出
• 子ども向けのネット見守りAI
• 詐欺メールの自動ブロックツール