Pythonでランダムフォレストを使いこなす!初心者向けAI・機械学習入門ガイド
生徒
「最近よく聞く『AI』や『機械学習』をやってみたいんですけど、プログラミング初心者でもできますか?」
先生
「もちろんです!Pythonというプログラミング言語を使えば、初心者の方でも『ランダムフォレスト』という非常に強力な予測モデルを簡単に作ることができますよ。」
生徒
「ランダムフォレスト……なんだか森みたいな名前ですね。難しそうですが、どうやって使うんですか?」
先生
「その名の通り、たくさんの『木』を使って予測する仕組みなんです。まずは基本から一緒に学んでいきましょう!」
1. 機械学習の「ランダムフォレスト」って何?
ランダムフォレスト(Random Forest)とは、人工知能(AI)の一種である「機械学習」の中で、特によく使われる手法の一つです。一言でいうと、「たくさんの多数決で答えを決める仕組み」です。
機械学習には「決定木(けっていぎ)」という仕組みがあります。これは、イエスかノーかの質問を繰り返して答えにたどり着く、フローチャートのようなものです。例えば「気温は30度以上か?」「はい」→「アイスが売れる」といった具合です。
しかし、一つの決定木だけだと、たまたま偏ったデータに影響されて間違った答えを出してしまうことがあります。そこで、たくさんの決定木をランダムに作り、それぞれの意見を集めて「多数決」で最終的な答えを出すのがランダムフォレストです。
「これは猫か犬か?」「このメールは迷惑メールか?」というふうに、データを特定のグループに分けることを「分類」と呼びます。
2. 準備をしよう!Pythonで機械学習を始める環境
Pythonで機械学習を始めるには、専門の「ライブラリ」という道具箱が必要です。パソコンを全く触ったことがない方でも、魔法の道具箱を使えば複雑な計算を自分でする必要はありません。
今回使う主な道具は以下の3つです。
- Scikit-learn(サイキット・ラーン): 機械学習の王道ツール。これ一つでランダムフォレストが使えます。
- Pandas(パンダス): データを表形式(Excelのような形)で扱うためのツールです。
- NumPy(ナムパイ): 数字の計算を高速で行うためのツールです。
まずは、これらが使えるようになっているか確認するための最初のプログラムを書いてみましょう。
# 必要な道具(ライブラリ)を読み込みます
import sklearn
import pandas as pd
import numpy as np
print("準備完了!ライブラリが読み込まれました。")
準備完了!ライブラリが読み込まれました。
3. 学習データの作成と中身の確認
AIに何かを教えてあげるためには、練習用のデータが必要です。これを「学習データ」と呼びます。今回は、架空の「お菓子が売れるかどうか」を予測するデータを作ってみましょう。
データには、予測のヒントになる「特徴量(とくちょうりょう)」と、答えとなる「目的変数(もくてきへんすう)」があります。ここでは「気温」と「休日かどうか」をヒントに、「売れたか(1)」「売れなかったか(0)」を予測させます。
# 練習用のデータを作成します
data = {
'気温': [25, 30, 15, 20, 35, 10, 28, 12],
'休日フラグ': [1, 0, 1, 1, 0, 0, 1, 0], # 1は休日、0は平日
'売れたかどうか': [1, 1, 0, 1, 1, 0, 1, 0] # 1は売れた、0は売れなかった
}
# データを表の形式に変換します
df = pd.DataFrame(data)
# 表の最初の方を表示してみます
print(df.head())
気温 休日フラグ 売れたかどうか
0 25 1 1
1 30 0 1
2 15 1 0
3 20 1 1
4 35 0 1
4. データを「学習用」と「テスト用」に分ける理由
AIの学習で最も大切なルールは、「練習で使った問題をテストに出さない」ということです。答えを丸暗記してしまうのを防ぐためです。
これを専門用語で「過学習(かがくしゅう)」の防止と言います。過去のデータには完璧に答えられるのに、新しいデータが来ると全く役に立たない状態のことです。これを避けるために、持っているデータを「勉強用」と「実力テスト用」の2つに分割します。
ポイント: 通常は、データの7割~8割を勉強に使い、残りの2割~3割をテストに使います。
5. ランダムフォレストのモデルを作ってみよう
いよいよメインイベントです。PythonのScikit-learnを使って、ランダムフォレストのモデル(予測機)を作成します。
プログラミングと聞くと何百行も書くイメージがあるかもしれませんが、実はたった数行で書けてしまいます。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 1. 特徴量(ヒント)と目的変数(答え)に分けます
X = df[['気温', '休日フラグ']]
y = df['売れたかどうか']
# 2. データを「学習用」と「テスト用」に分けます
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. ランダムフォレストのモデルを作ります
# n_estimatorsは「作る木の数」です
model = RandomForestClassifier(n_estimators=100)
# 4. 学習(勉強)させます
model.fit(X_train, y_train)
print("モデルの学習が完了しました!")
モデルの学習が完了しました!
ここで出てきた model.fit という言葉が、まさに「AIがデータを読み込んでパターンを学習している」瞬間です。
6. 作ったモデルで未来を予測する
学習が終わったら、次は未知のデータを使って予測をしてみましょう。例えば、「今日は気温が22度で、平日(休日フラグ0)」だった場合、お菓子は売れるでしょうか?
AIが算出した答えを確認する方法を見ていきましょう。predict(プリディクト)という命令を使います。
# 新しいデータを作ります(気温22度、平日0)
new_data = [[22, 0]]
# 予測を実行します
prediction = model.predict(new_data)
if prediction[0] == 1:
print("予測結果:お菓子は売れるでしょう!")
else:
print("予測結果:残念ながら、あまり売れないでしょう。")
予測結果:お菓子は売れるでしょう!
このように、過去の経験(データ)に基づいて、新しい状況下での結果をAIが判断してくれるようになります。
7. モデルの精度を確認して実力を測る
予測ができたら、そのAIがどれくらい優秀なのかを数字で確認する必要があります。これを「精度(せいど)」と呼びます。
テスト用のデータを使って、AIが出した答えと実際の正解がどれくらい一致しているかを計算します。
from sklearn.metrics import accuracy_score
# テストデータを使って予測をしてみます
y_pred = model.predict(X_test)
# 正解率(精度)を計算します
accuracy = accuracy_score(y_test, y_pred)
print(f"このモデルの正解率は {accuracy * 100}% です!")
このモデルの正解率は 100.0% です!
今回はデータが非常に少ないので100%になりやすいですが、実際のビジネス現場では、80%や90%を目指して改良を重ねていくことになります。
8. なぜランダムフォレストは人気があるの?
機械学習には他にも「線形回帰」や「ディープラーニング」など様々な手法がありますが、その中でもランダムフォレストが初心者からプロまでに愛される理由がいくつかあります。
- データの準備が楽: データの数字の大きさを揃えたりする難しい処理(正規化など)をあまり気にしなくても、精度が出やすいです。
- 何が重要か教えてくれる: 「どのヒントが予測に役立ったか」を教えてくれる機能があります。例えば「お菓子が売れるには、休日かどうかより気温の方が大事だった」ということが分かります。
- 外れ値に強い: 1つだけ極端にヘンテコなデータが混ざっていても、多数決のおかげで結果が狂いにくいという強さがあります。
プログラミングに慣れていない方でも、まずはこのランダムフォレストを使ってみることで、AIがどのように判断を下しているのかという感覚を掴むことができます。
9. 初心者がつまずきやすいポイントと対策
Pythonでプログラミングを始めると、最初は英語の文字ばかりで戸惑うかもしれません。特に「エラーメッセージ」が出ると不安になりますが、実はエラーはAI学習のチャンスです。
例えば、データの個数が「ヒント(特徴量)」と「答え(目的変数)」でズレていると、Pythonは「数が合わないよ!」と怒ってくれます。そんな時は、落ち着いて len() という命令を使ってデータの数を確認してみましょう。
また、日本語が含まれるデータを扱うときは「文字化け」に注意が必要です。今回の例のように、プログラミングの中ではできるだけアルファベットや数字で管理し、表示するときだけ日本語にするのがコツです。
10. さらなるステップアップに向けて
今回は非常にシンプルなデータで体験しましたが、本物の機械学習では数万件、数百万件という膨大なデータを扱います。
ランダムフォレストをマスターすれば、次は「ハイパーパラメータ」という、モデルの細かい設定(例えば、森の中に作る木の数をいくつにするか、木の深さをどこまでにするか等)を調整することで、さらに予測の精度を上げることができます。
Pythonには、今回紹介した以外にも便利な機能がたくさん詰まっています。まずは今回のコードを自分のパソコンで動かしてみて、数字を変えてみたりしながら、AIが予測を変える様子を楽しんでみてください。それが機械学習エンジニアへの第一歩です!
まとめ
今回の記事では、Python(パイソン)を使った機械学習(キカイガクシュウ)の代表的な手法である「ランダムフォレスト(Random Forest)」について詳しく解説してきました。人工知能(AI)やデータサイエンスの世界に興味がある初心者(ショシンシャ)の方にとって、ランダムフォレストは非常に強力でありながら、扱いやすいツールであることを理解していただけたのではないでしょうか。
ランダムフォレストの重要なポイントを再確認
ランダムフォレストの最大の特徴は、複数の「決定木(ケッテイギ)」を組み合わせて、その結果を多数決(タスウケツ)で決定するという点にあります。一つの木だけで判断すると、特定のデータに過剰に反応してしまう「過学習(カガクシュウ)」という現象が起きやすくなりますが、たくさんの木が集まって「森(フォレスト)」を作ることで、そのリスクを大幅に減らすことができます。
また、プログラミング初心者(ショシンシャ)がPython(パイソン)で機械学習(キカイガクシュウ)を実装する際に、以下のステップが基本となることを学びました。
- 1. ライブラリの読み込み(PandasやScikit-learnなど)
- 2. 学習データ(ガクシュウデータ)の準備と特徴量(トクチョウリョウ)の選定
- 3. データの分割(学習用とテスト用)による精度の検証準備
- 4. モデルの構築と学習(fitメソッドの実行)
- 5. 未知のデータに対する予測(predictメソッドの実行)
- 6. 正解率(セイカイリツ)によるモデルの評価
実践的なサンプルコード:特徴量の重要度を確認する
ランダムフォレストの便利な機能として、「どのデータが予測(ヨソク)に最も貢献したか」を数値で確認できる「特徴量の重要度(トクチョウリョウノジュウヨウド)」があります。これにより、AIが何を根拠に判断したのかを人間が理解しやすくなります。
# 特徴量の重要度(どのヒントが大事だったか)を確認します
import matplotlib.pyplot as plt
# 重要度を取得します
importances = model.feature_importances_
feature_names = X.columns
# 結果を表示します
for name, importance in zip(feature_names, importances):
print(f"項目名: {name} / 重要度: {importance:.4f}")
# グラフで可視化(カシカ)することも可能です
# ※実行環境によってはグラフ表示のライブラリ設定が必要です
項目名: 気温 / 重要度: 0.7241
項目名: 休日フラグ / 重要度: 0.2759
このように、AIが「気温(キオン)」を重視してお菓子の売れ行きを判断していることが分かれば、ビジネスの現場でも「明日は暑いから在庫を増やそう」といった具体的なアクションに繋げることができます。これこそが、データ活用(データカツヨウ)の本質です。
これからの学習に向けて
今回学んだ内容は、AIエンジニアやデータサイエンティストとしての第一歩に過ぎません。Python(パイソン)には、さらに高度な「ディープラーニング(深層学習)」や、データの傾向をグラフ化する「データ可視化(データカシカ)」の技術など、奥深い世界が広がっています。
まずは、自分の身の回りにあるデータ(例えば、自分の勉強時間とテストの点数、あるいはSNSの投稿時間と『いいね』の数など)をExcel(エクセル)形式で用意し、今回のコードを応用して読み込ませてみてください。自分で用意したデータでAIが動く瞬間を体験することが、最も効率の良い学習方法(ガクシュウホウホウ)です。
機械学習(キカイガクシュウ)は決して魔法ではありません。数学(スウガク)と統計(トウケイ)に基づいた論理的な仕組みです。エラーが出ても、それはAIが正しく動くためのヒントを教えてくれているだけです。焦らずに、一歩ずつプログラミングを楽しんでいきましょう!
生徒
「先生、ありがとうございました!ランダムフォレストって、たくさんの『木』が相談して答えを決めていると思うと、なんだか親近感がわいてきました。」
先生
「それは良い視点ですね。一人の天才が決めるよりも、多くの意見を集約(シュウヤク)する方が間違いが少ない、という民主的なアルゴリズムなんです。実際に動かしてみてどうでしたか?」
生徒
「model.fit と書くだけで、AIが一生懸命勉強している感じがして感動しました!でも、データの数(サンプル数)が少ないと正解率が100%になっちゃうんですね。」
先生
「そうなんです。データが少ないと、たまたま正解してしまうことがあります。本物のAI開発では、もっとたくさんのデータを使って、どんな場面でも正解できる『汎用性(ハンヨウセイ)』を高める工夫が必要になります。」
生徒
「なるほど……。次は、もっと複雑なデータを使って、自分だけの予測モデルを作ってみたいです!気温(キオン)以外にも、湿度(シツド)やイベントの有無(ウム)をヒントに追加すれば、もっと正確になりますか?」
先生
「素晴らしいですね!予測のヒントになる『特徴量(トクチョウリョウ)』を工夫するのは、データサイエンティストの腕の見せ所です。ぜひ、色々なデータで実験(ジッケン)してみてくださいね。」
生徒
「はい!エラーが出ても、AIからのメッセージだと思って前向きに取り組んでみます。Python(パイソン)での機械学習(キカイガクシュウ)、もっと極めたくなりました!」