【保存版】Pythonでスパムメール判定機を作る方法|自然言語処理×機械学習で初心者でもできる!

プログラミング

毎日のように届く迷惑メール、なんとか自動で分類できないかと思ったことはありませんか?

本記事では、Pythonを使って「スパムメール判定機」を作る方法を、初心者の方にもわかりやすく解説します。

機械学習の代表的なライブラリ「scikit-learn」を使い、メールの内容を自然言語処理で分析し、スパムかどうかを自動判定するプログラムを実装していきます。

「難しそう…」と感じるかもしれませんが、必要な部分はすべて丁寧に解説しているので安心してください。

この機会に、迷惑メールの自動振り分けAIを自作してみましょう!

スパム判定機とは?【目的と活用例】

✅結論

スパム判定機とは、メールの内容を分析して迷惑メールかどうかを分類するプログラムです。

✅理由

ネット社会では、詐欺や広告などの迷惑メールが日常的に届きます。手動で仕分けるのは非効率なので、AIによる自動判別が強く求められています。

✅具体例

例えば以下のような用途があります。

• メールサービスに組み込み、自動仕分けを行う

• 社内システムに導入し、セキュリティ対策とする

• LINEやSlackなどのチャットにも応用可能

ポイント

このように「人の手間を減らすため」の技術として、スパム判定は広く使われています。

Python環境の構築方法【初心者向け】

✅結論

Pythonと必要なライブラリをインストールするだけで、スパム判定機は簡単に始められます。

✅やり方

1. Pythonのインストール

公式サイト(https://www.python.org/)から最新版をダウンロードします。

2. 仮想環境を作成

1
2
3
python -m venv spamenv
source spamenv/bin/activate  # Mac/Linux
spamenv\Scripts\activate     # Windows

3. ライブラリのインストール

1
pip install pandas scikit-learn matplotlib

4. Jupyter Notebookの準備(必要に応じて)

1
pip install jupyterlab

✅補足

Jupyterを使うとコードの確認・実行がしやすくなります。初心者にもおすすめです。

データの準備と前処理【自然言語処理】

✅結論

スパム判定にはメールのテキストを処理するための自然言語処理(NLP)が必要です。

✅やること

データセットの読み込み(例:SMS Spam Collection Dataset)

不要な記号や空白の除去

単語の出現頻度を数値に変換(Bag of Words)

1
2
3
4
5
6
7
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の決定木やナイーブベイズを使えば、簡単に学習と評価が可能です。

1
2
3
4
5
6
7
8
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))

✅ポイント

学習データとテストデータを分けることが大切です。

• 予測結果の正解率(精度)を確認して、性能を判断します。

実際にスパム判定を試してみる【予測】

✅結論

学習したモデルにメール本文を入力するだけで、「スパムかどうか」を判定できます。

1
2
3
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

詐欺メールの自動ブロックツール

✅内部リンク例(関連記事)

Pythonで手書き数字を判定する方法

PythonとXGBoostで競馬予測する方法

タイトルとURLをコピーしました