毎日のように届く迷惑メール、なんとか自動で分類できないかと思ったことはありませんか?
本記事では、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
• 詐欺メールの自動ブロックツール