こんにちは、神楽 朔です!
前回の記事
「【Python初心者向け】1時間でスパムメール分類モデルを作ってみた(SIGNATEチュートリアル徹底解説)」
では、無事にスパムメール分類AIを完成させることができました。
しかし、提出したスコアを見て、こう思いませんでしたか?
「もっと上を目指したい!でも、何をすればいいんだ…?」
この記事は、そんなあなたのための**「ネクストステップ」**です。
チュートリアルで使ったCountVectorizer
という基本技から、まるで魔法の呪文のようなTfidfVectorizer
とN-gram
という2つの強力な技を繰り出すことで、AIを"覚醒"させ、スコアを劇的に向上させる方法を伝授します。
この記事を読み終える頃には、「なんとなくできた」状態から、「なぜ精度が上がるのか」を自分の言葉で語れるようになっているはずです。さあ、AIと一緒に成長する旅に出ましょう!
なぜスコアが伸び悩むのか?AIくんの"悩み"
前回のモデルで使ったCountVectorizer
は、「単語の出現回数」だけを数える真面目な子でした。
例えば、こんなメールがあったとします。
メールA: 「The winner is you! Click the link!」
メールB: 「The meeting is scheduled.」
この2つのメールをCountVectorizer
くんに見せると、彼はこう考えます。
「ふむふむ… "The" と "is" がどっちのメールにも1回ずつ出てくるな。これは共通の特徴に違いない!」
ここに落とし穴があります。
私たち人間なら、「The
や is
なんて、どんな文章にも出てくるから無視していい。重要なのは winner
や Click
の方だ!」と直感的にわかりますよね。
しかし、単純な回数しか見れないAIくんは、本当に重要な単語とどうでもいい単語の区別がつきません。これが、チュートリアルモデルの限界でした。
技1:TfidfVectorizer
- "レア度"で単語に重みをつける魔法
AIくんに「単語の重要度」を教える魔法、それが TfidfVectorizer
です。
これは、2つの指標を掛け合わせることで、単語のスコアを計算します。
-
TF (Term Frequency - 単語の出現頻度)
- 「そのメールの中で、その単語がたくさん出てくれば重要だろう」という考え方。
- 例:「money money money」と連呼するメールは、
money
が重要。
-
IDF (Inverse Document Frequency - 逆文書頻度)
- 「色々なメールに頻繁に出てくる単語は、特徴としての価値が低い」という考え方。
- 例:「the」「a」「is」のような単語は、どのメールにも出てくるので価値(スコア)が低くなります。
- 逆に、「viagra」「winner」のような、特定のメールにしか出てこないレアな単語は、価値(スコア)が高くなります。
つまり、TF-IDF
とは 「そのメールではよく見るけど、他のメールではあまり見ない、超個性的な単語」 ほど高いスコアを与える魔法なのです!
実装:呪文を唱えてみよう!
驚くべきことに、この強力な魔法は、チュートリアルのコードをほんの少し変えるだけで使えます。
# 前回使ったCountVectorizer
# from sklearn.feature_extraction.text import CountVectorizer
# 今回使うTfidfVectorizerにチェンジ!
from sklearn.feature_extraction.text import TfidfVectorizer
# ... (データの読み込みや前処理は前回と同じ) ...
# ----------------------------------------------------
# ★★★ここを変えるだけ!★★★
# ----------------------------------------------------
# vectorizer = CountVectorizer() # 以前のコード
vectorizer = TfidfVectorizer() # 新しい魔法の呪文!
# ----------------------------------------------------
# これ以降の .fit_transform や .transform の使い方は全く同じ
X_train_array = vectorizer.fit_transform(X_train).toarray()
X_valid_array = vectorizer.transform(X_valid).toarray()
たったこれだけで、AIくんは単語のレア度を学習し、賢くなります。
ぜひ、この状態で一度スコアを提出してみてください。きっとスコアが上がっているはずです。
技2:N-gram
- 単語の"コンボ"を認識させる合わせ技
TfidfVectorizer
で賢くなったAIくんですが、まだ弱点があります。
彼は単語を一つ一つバラバラにしか見ていません。
メールC: 「Please click here for your prize.」
メールD: 「Here is the document. Please click to open.」
AIくんにとって、この2つのメールに出てくる click
と here
は、どちらも同じ「ただの単語」です。
しかし、私たちは 「click here
というコンボ(組み合わせ)は、スパムメールでよく見る怪しいやつだ!」 と知っています。
この単語の"コンボ"をAIくんに教える技が、N-gram
(エヌグラム) です。
N-gram
は、隣り合ったN個の単語を一つのセットとして扱います。
-
1-gram (unigram): いつもの。単語1つずつ。(
Please
,click
,here
, ...) -
2-gram (bigram): 隣り合った単語2つの組み合わせ。(
Please click
,click here
,here for
, ...) -
3-gram (trigram): 隣り合った単語3つの組み合わせ。(
Please click here
,click here for
, ...)
TfidfVectorizer
に「2-gramも特徴として使ってね!」と指示するだけで、AIくんは単語のコンボ攻撃も学習できるようになります。
実装:合わせ技を発動!
これも、TfidfVectorizer
にオプションを追加するだけ。簡単です。
# TfidfVectorizerを呼び出すときに、オプションを追加する
vectorizer = TfidfVectorizer(
ngram_range=(1, 2) # ★★★この一行を追加!★★★
)
ngram_range=(1, 2)
というのは、「1-gram(単語単体)と 2-gram(2単語コンボ)の両方を特徴として使ってください」という意味です。
これで、AIくんは「click
という単語」と「click here
というコンボ」の両方を武器として戦えるようになり、さらに強くなります。
最終決戦:最強の呪文をまとめた完全コード
それでは、これまでに学んだ2つの魔法を組み合わせ、さらに強力なAIモデルLogisticRegression
を使った最終コードをお見せします。
これを実行すれば、あなたのスパムメール分類AIは真の力を発揮するでしょう!
# ===================================================================
# 魔法の呪文をすべて盛り込んだ完全版コード
# ===================================================================
# 1. ライブラリのインポート(前回と同じ)
# ... (省略) ...
# 2. データの読み込みと前処理(前回と同じ)
# ... (省略) ...
# 3. AIを覚醒させる魔法の詠唱
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
# 技1(Tfidf)と技2(N-gram)を同時に発動!
# max_features=5000: 武器(単語)を強力なもの5000個に厳選するオプション
vectorizer = TfidfVectorizer(
ngram_range=(1, 2),
max_features=5000
)
# 訓練データで魔法の辞書を作成し、数値化
X_train_array = vectorizer.fit_transform(X_train).toarray()
X_valid_array = vectorizer.transform(X_valid).toarray()
test_array = vectorizer.transform(test['text_processed']).toarray()
# 4. より強力なAIモデル(ロジスティック回帰)を召喚し、学習させる
model = LogisticRegression(random_state=42)
model.fit(X_train_array, y_train)
# 5. 性能評価と提出ファイルの作成
# ... (前回と同じ) ...
まとめ:AIは魔法で強くなる!
今回は、スパムメール分類AIのスコアを向上させるための2つの強力なテクニックを紹介しました。
-
TfidfVectorizer
: 単純な回数ではなく、単語の 「レア度」 を考慮する魔法。 -
N-gram
: バラバラの単語だけでなく、「単語のコンボ」 を認識させる合わせ技。
重要なのは、「なんとなくコードを変えたらスコアが上がった」ではなく、「AIが何を苦手としていて、それを解決するためにどんな魔法(手法)を使ったのか」 を理解することです。
この考え方は、スパムメール分類だけでなく、あらゆるデータ分析の冒険で役立つ最強の武器になります。
ぜひ、あなた自身の手でAIを覚醒させ、さらなる高みを目指してみてください!