お悩み女子Pythonで機械学習を始めたいけれど、NumPyやpandasなど、名前が多くて何から触ればいいか迷います。
最初は配列を扱うNumPy、表を扱うpandas、モデルを学習させるscikit-learnの役割を分けると進めやすくなります。3つを全部覚えてから始める必要はありません。小さな表を読み、学習用と評価用に分け、予測を確かめるところまで一度進めます。
この記事ではAPIキーを使わず、花の測定値から種類を分類する例でPython機械学習の始め方を紹介します。外部サービスに業務データを送る処理はありません。後半では、評価の数字がよくても、そのまま仕事に使えない理由も確認します。
- NumPy・pandas・scikit-learnを使い分ける理由
- 組み込みデータで学習・予測・評価を進める手順
- 過学習やデータ漏洩を避け、次の練習へ進む見方
Pythonの機械学習とAPI利用の違い
機械学習はデータから予測や分類に使う規則を学ぶ方法です。ここでは、答え付きの例から学ぶ「教師あり学習」を扱います。
自分のデータで学習する処理
花びらの長さなどを入力し、花の種類を当てる処理を考えます。入力側の測定値が特徴量、当てたい種類が正解ラベルです。人が「何を入力し、何を当てるか」を決めてから、モデルに関係を学ばせます。
文章生成APIの呼び出しは提供されているモデルへ入力を送って出力を受け取る使い方です。今回の例は手元のデータを使い、手元のPythonで小さな分類モデルを学習させます。APIキーの取得はこの学習例の前提ではありません。
先に確かめたい自動化の目的
合計や平均の計算、決まった条件での振り分けなら、通常のPython処理で足りる場合があります。筆者なら、まず一定のルールで解ける作業かを確かめます。過去の実績から判断の傾向を学びたい場面で、機械学習を候補にします。
Python機械学習の3ライブラリ|配列・表・モデル
最初に覚えるのは、関数の数よりもどのライブラリに何を任せるかです。3つは競合する道具ではなく、一緒に使います。
| ライブラリ | 担当すること | 最初に触るもの |
|---|---|---|
| NumPy | 数値の配列と計算 | array、shape、mean |
| pandas | 列名のある表とデータ確認 | DataFrame、head、dtypes、isna |
| scikit-learn | 学習・予測・評価 | train_test_split、fit、predict、score |
NumPyとpandasの短い練習
NumPyの配列は数値をまとめて計算する土台です。pandasのDataFrameでは、列名や行の内容を見ながら表を確認できます。次は架空の4件を使う例です。ファイルや個人情報は読み込みません。
import numpy as np
import pandas as pd
minutes = np.array([12, 18, 15, 11])
records = pd.DataFrame({"作業時間_分": minutes})
print("行数と列数:", records.shape)
print("平均時間:", minutes.mean())
print("欠損数:", int(records.isna().sum().sum()))
出力は、行数と列数が(4, 1)、平均時間が14.0、欠損数が0です。列名と数値の関係を追えるようになってから、モデルに渡す表へ進みます。
scikit-learnの3つの操作
fitで学習し、predictで予測し、scoreなどで評価します。同じ名前の操作を持つモデルが多く、最初の流れを覚えると別の手法も試しやすくなります。モデル名の暗記より、この順序とデータの渡し方を先に押さえます。
Python機械学習の準備|仮想環境と動作確認
WindowsのPowerShellでは、作業用フォルダを開いてから専用の仮想環境を作ると、ほかのPython作業とライブラリを分けられます。
①専用環境の作成
Pythonが利用できる状態で、次のコマンドを順に実行します。インストール名はscikit-learn、コード内での読み込み名はsklearnです。インストール時にはパッケージのダウンロードが発生します。
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install numpy pandas scikit-learn
.\.venv\Scripts\python.exe -c "import numpy, pandas, sklearn; print('import OK')"
最後にimport OKが出れば、同じPythonから3つを読み込めています。仮想環境の有効化コマンドを使わず、実行ファイルの場所を直接指定する形です。Python自体が見つからない場合は、先にWindowsでのPythonインストール手順を確認してください。
②使うPythonの確認
エディタやノートブックを使う場合は、選択しているPythonも同じ仮想環境かを見ます。インストールしたターミナルと実行する環境が違うと、必要なライブラリが見つかりません。環境の分け方はvenv・uv・Poetryによる仮想環境の使い分けで補足しています。
以下のPythonコードはWindowsのPython 3.12.10で実行を確認しています。ライブラリのバージョンは後述の出力方法で確認できます。新しい仮想環境への導入が成功するかは、使うPython、ネットワーク、組織のPC設定によって変わります。
Irisを使った最初の分類モデル
使うのはscikit-learnに含まれるIrisデータセットです。アヤメの測定値150件、特徴量4つ、種類3つからなる分類用の小さなデータです。別のデータファイルを用意せずに始められます。
①入力と正解ラベルの確認
load_iris(as_frame=True)で読み込むと、入力をpandasの表として扱えます。Xは測定値、yは種類を表す番号です。予測したい答えを入力列に混ぜないように、この2つを分けます。
②学習120件と評価30件への分割
今回は20%を評価用に残します。モデルに見せる120件と、最後に確かめる30件を先に分ける手順です。stratify=yは種類の割合を保つための指定、random_state=42は同じ条件の分け方を再現しやすくする指定です。
③学習・予測・正解率の出力
次をiris_first.pyという名前で保存します。学習するモデルには決定木を使い、比較用として「最も多い種類を答えるだけ」のモデルも用意します。max_depth=3は木の深さを制限する指定です。
import numpy as np
import pandas as pd
import sklearn
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
iris = load_iris(as_frame=True)
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
model = DecisionTreeClassifier(max_depth=3, random_state=42)
model.fit(X_train, y_train)
predicted = model.predict(X_test)
baseline = DummyClassifier(strategy="most_frequent")
baseline.fit(X_train, y_train)
print("データの形:", X.shape)
print("学習件数:", len(X_train), "評価件数:", len(X_test))
print("予測の先頭5件:", predicted[:5].tolist())
print(f"決定木の正解率: {model.score(X_test, y_test):.3f}")
print(f"単純な比較用モデル: {baseline.score(X_test, y_test):.3f}")
print("バージョン:", np.__version__, pd.__version__, sklearn.__version__)
PowerShellから同じ仮想環境のPythonで実行します。ファイルを別のフォルダへ保存した場合は、そこへ移動してから実行してください。
.\.venv\Scripts\python.exe iris_first.py
データの形は(150, 4)、学習件数は120、評価件数は30です。正解率は評価用データで当たった割合を表します。出力された値は今回のデータ・分割・モデルの組み合わせで得た結果として読みます。
Python 3.12.10、NumPy 2.5.1、pandas 3.0.2、scikit-learn 1.9.0でこのコードを動かした出力は、決定木が0.967、単純な比較用モデルが0.333でした。これは機械学習の一般的な性能ではなく、上の条件で得た練習用の結果です。
Python機械学習の評価|正解率だけを見ない理由
コードが動くことと、仕事で役立つことは別に確かめます。最初に見るのは学習に使っていないデータで評価したかです。
学習データへの当てはまりと過学習
学習に使ったデータだけで採点すると、その例に合わせすぎたモデルでもよい数字が出ます。これが過学習を見落とす一因です。この記事の例ではfitに渡すのを学習側だけにし、評価側をscoreへ渡しています。
評価30件なら、1件違うだけで正解率は約3.3ポイント変わります。1回の分割で高い数値が出ても、ほかのデータで同じ性能が続くとは限りません。次の練習では、複数の分割で確かめる交差検証へ進みます。
評価データの情報が混ざるデータ漏洩
評価用の情報を、前処理や学習の判断に混ぜることをデータ漏洩と呼びます。たとえば、全件から平均値を求めて欠損を埋め、その後で学習用と評価用に分けると、評価側の情報も平均値に入ります。
まず分割し、平均などの値を学習側だけから求め、評価側にも同じ変換を使うのが基本です。前処理を増やす段階では、Pipelineで変換とモデルをまとめる方法を学びます。手順の根拠はscikit-learnのデータ漏洩に関する説明でも確認できます。
業務で間違えたときの影響
ほとんどが通常案件の表なら、「全部通常」と答えるだけでも高い正解率になる場合があります。見逃したくない種類が何かを決め、種類ごとに正しく分類できたか、取りこぼしがないかも見ます。Irisでの正解率を、請求書や問い合わせの分類に使える証拠にはしません。
Python機械学習のエラー|環境と入力の切り分け
最初のエラーでは、モデルを別のものに替える前に、読み込んでいるPythonとデータの形を確かめます。
| 症状 | 確認する場所 | 次の対応 |
|---|---|---|
| ModuleNotFoundError | 実行中のPythonとインストール先 | 同じ環境のpython.exeからpipを実行 |
| ファイルを開けない | iris_first.pyの保存先と現在のフォルダ | 保存先へ移動し、ファイル名を確認 |
| 列数・件数が合わない | X.shapeとy.shape | 入力の1行と正解1件の対応を確認 |
| 文字列を数値に変換できない | 入力列の型と不要な列 | 列ごとに何を表す値かを確認 |
| 数値だけ極端によい | 分割の順序と答えに近い列 | データ漏洩や重複を点検 |
自分のファイルをnumpy.py、pandas.py、sklearn.pyという名前にすると、本来のライブラリと名前が衝突することがあります。サンプルとは違う内容が読み込まれる場合は、ファイル名や同名フォルダも確認します。
欠損や文字列を含む業務表をそのまま当てはめると、Irisでは起きなかったエラーが出ます。エラーを消すためだけに行や列を削ると、学習対象が変わります。どのデータを除外し、その理由は何かを記録して進めてください。
業務データを扱う前の学習順
次の順序なら、どこで理解が止まったかを分けて確認できます。高度なモデルを増やすより、1つのデータを説明できる状態を目指します。
- Pythonの変数、リスト、関数、エラーの読み方を覚える
- NumPyの配列とpandasの表で、件数・列・欠損を確かめる
- Irisで学習用と評価用を分け、fit・predict・scoreを動かす
- 単純な比較用モデル、過学習、データ漏洩、交差検証を学ぶ
- 小さな業務表で目的と誤りの影響を決め、必要な前処理を追加する
業務データに移るときは、最初に人や会社を識別する情報を含まない練習用の表を用意します。表の内容を確かめる練習には、PythonでCSVを集計し、欠損や数値を確認する手順も使えます。分割する前に全件の統計量を学習へ流用しない点には注意してください。
同じ人の記録が複数行ある表や、時間順に予測する表では、単純なランダム分割が目的に合わない場合もあります。人単位・時系列など、実際に予測する状況に合う分け方を選ぶ段階が必要です。最初の分類例はその判断を学ぶための入口として使います。
Python機械学習の始め方に関する3つの疑問
始める前の準備と、最初の例を終えた後によく迷う点をまとめます。
- 数学をすべて学んでから始める必要がありますか?
-
最初の分類例を動かす前に、数学をすべて終える必要はありません。表の行と列、割合、平均を確認しながら始められます。モデルの仕組みや評価を理解する段階で、確率・統計や線形代数を必要に応じて学びます。
- APIキーやGPUが必要ですか?
-
この記事のNumPy・pandasの練習とIrisの決定木には、APIキーやGPUは不要です。パッケージ導入後は、組み込みデータをローカルで扱います。大きなデータや別の学習手法では、必要な計算資源を別途判断します。
- 正解率が高ければ、そのまま業務に使えますか?
-
小さな練習データでの高い正解率だけでは判断できません。実際の入力の違い、見逃しの影響、データ漏洩、運用後の変化を確認します。人の確認を残した小さな試用から、役立つかを確かめます。
この記事のライブラリの役割とAPIは、NumPyの入門ガイド、pandasの表データ入門、scikit-learnのGetting Started、Irisデータの説明を参照しています。まずは入力・学習・評価の関係を自分で追える1本を作るところから進めてみてください。
