第36回 モデルとデータの実運用監視:データドリフト検出から再学習までの実践ワークフロー

はじめに:つまずきに寄り添う

自動化ジョブは動いているのに、期待通りの成果が出ない。こうした場面で多くの実務担当者が感じるのは「どこをどう監視すればよいか分からない」という不安です。本記事は、第35回(スケジュール・監視・障害対応)の流れを受け、モデルの入力・出力の『品質監視』を現場で回すための実践的な手順を示します。Pythonで使える短いコード片、閾値の考え方、アラート/対応フロー、再学習トリガーの実務例まで扱います。まずは小さく始め、確実に運用に繋げることを目標にしてください。

監視対象と優先順位付け

限られたリソースで何を最初に監視するか。優先順位の目安を次の表にまとめます。

カテゴリ 監視項目 計測方法(例) 優先度
入力データ カテゴリ比率、平均・分散、欠損率 pandasでバッチ集計(daily/weekly)
出力 予測確率分布、トップカテゴリ比 確率ヒストグラム、累積分布
信頼度 予測確度、モデルの信念(confidence) 閾値以下の割合、校正測定
KPI CTR、成約率、解約率等 ビジネスメトリクスとの差分監視
性能 レイテンシ、タイムアウト率 APM/ログ集計

データドリフトの検出:手順とPython例

代表的な手法として、PSI(Population Stability Index)、KLダイバージェンス、KS検定、カテゴリ差分があります。まずは簡単なバッチ処理で基準(baseline)と最新バッチを比較する運用を勧めます。

実務上の手順(要点)

  • 基準期間(例:過去30日)を決めて分布を保存する。
  • 日次または週次で最新データの分布を算出し、比較指標を計算する。
  • 段階的アラート(情報→注意→緊急)を設定する。緊急では自動停止やロールバックを検討する。

短いPythonスニペット(PSI, KS, カテゴリ差分)

下はそのまま貼って使いやすい最小限の例です。

目的 コード(抜粋)
PSI(数値変数)
import numpy as np

def psi(expected, actual, buckets=10):
    eps = 1e-6
    breakpoints = np.linspace(0, 100, buckets+1)
    expected_perc = np.histogram(expected, bins=np.percentile(expected, breakpoints))[0] / len(expected)
    actual_perc = np.histogram(actual, bins=np.percentile(expected, breakpoints))[0] / len(actual)
    expected_perc = np.where(expected_perc==0, eps, expected_perc)
    actual_perc = np.where(actual_perc==0, eps, actual_perc)
    return np.sum((expected_perc - actual_perc) * np.log(expected_perc / actual_perc))
KS検定(連続変数)
from scipy import stats

ks_stat, p_value = stats.ks_2samp(baseline_series, current_series)
# p_value が小さいと分布差があると判断
カテゴリ比率差分(pandas)
import pandas as pd

b = baseline_df['cat'].value_counts(normalize=True)
 c = current_df['cat'].value_counts(normalize=True)
diff = (c.reindex(b.index, fill_value=0) - b).abs()
# diff の上位を調査対象に

閾値の現実的考え方

閾値は業務依存です。目安としては以下のような段階を採ると運用しやすくなります。

レベル 例(PSI) 想定対応
情報 PSI < 0.1 ログ記録、日次レポート
注意 0.1 ≤ PSI < 0.25 担当者に通知、追加確認(サンプル確認)
緊急 PSI ≥ 0.25 自動アラート、場合によりモデル停止/ロールバック

モデル性能監視:ラベル遅延と代理指標

多くの現場ではラベルが遅れて入る(あるいはそもそも入らない)ため、以下のような実務的工夫が必要です。

  • ラベルが入る場合:遅延を考慮したウィンドウ評価(例:7日遅延を許容し、30日窓で評価)
  • ラベルがない場合:疑似ラベル、プロキシ指標(例:ユーザー行動の変化、CTRのずれ)を監視する
  • 差分監視:直近期間と基準期間の差を定期レポートにする
方式 利点 注意点
オンライン評価(ラベルあり) 迅速に劣化検知 ラベル遅延の考慮が必要
プロキシ指標(ラベル無し) 早期検知が可能 真の性能とはずれる可能性あり
バッチ評価 安定した集計、再現性あり 検知遅延がある

差分算出(簡易例)

目的 処理(ヒント)
期間ごとの指標差分 期間A(基準)と期間B(最新)で精度、CTR等を算出し、増減率を記録する。増減が閾値超ならアラート。

アラートと対応フロー(実務テンプレート)

重大度ごとのしきい値と対応を整理しておくと、運用が滑らかになります。

重大度 トリガー例 一次対応 通知先・フォーマット
情報 PSI 0.05〜0.1、レイテンシ微増 ログ記録、日次レポート追加 Slack #ai-ops にサマリ投稿
注意 PSI 0.1〜0.25、KPI差分が小幅 担当者がサンプル確認、原因調査 Slack + メール(担当者)
緊急 PSI ≥ 0.25、KPI悪化著明 自動ロールバック、オンコール招集 PagerDuty / Slackアラート(テンプレート下記)

通知テンプレート(Slack/メール 例)

チャネル テンプレート(要約)
Slack [ALERT] 種類: データドリフト | レベル: 緊急 | 指標: PSI=0.28 | 対応: ロールバックを検討。詳細: https://manageai.online/monitor/123
メール 件名: 【緊急】モデル運用アラート(PSI 0.28)\n本文: 発生時刻、影響範囲、推奨対応(ロールバック/データ収集)を記載。

再学習トリガー設計とパイプライン実行

再学習の起点は複数設計しておくと安全です。代表的なパターンは以下の通り。

トリガー 条件 実務例(起動方法)
閾値ベース PSI/KPIが閾値超(かつデータ量条件) AirflowのDagをRESTでトリガー、またはGitHub Actionsを手動/自動で起動
定期再学習 週次/月次で学習を実施 Airflowスケジュール、GHA定期実行
ハイブリッド 性能劣化+新規データ量が閾値超 再学習を自動で回し、検証後に承認でデプロイ

運用上の注意点

  • データバージョン管理(DVC 等)で入力データのスナップショットを残す。
  • モデルの署名(ハッシュ、ハイパーパラメータ)と評価結果をMLflow等に記録する。
  • 自動デプロイ時は必ずカナリア/ブルーグリーンで段階的に流す。

データ/モデルのバージョン管理(運用方針)

ツール 何を保存するか(最小セット) 運用ルール(例)
DVC 学習データのスナップショット、前処理スクリプト 学習実行毎にデータhashをタグ付け
MLflow モデルアーティファクト、評価指標、環境情報 全モデルに一意のバージョンを付与し、評価結果を必須記録

人手介入と改善ループ(1人でも回せるワークフロー)

疑わしいサンプルを抽出してラベル付け→評価→デプロイを一人で回すための最小フローを示します。

  1. アラート発生→サンプル抽出スクリプトで上位100件をCSV出力。
  2. 小さなバッチでラベリング(内部担当 or クラウドソーシング)。
  3. 再評価(ローカルでリトレーニング、評価)→結果が改善すればステージングへデプロイ。
  4. 運用者は結果を記録し、次のアラート閾値を調整。
チェックポイント 具体例
サンプル抽出基準 PSI上位バケット、予測確率が極端に低いサンプル
ラベリング品質管理 同一サンプルを複数人で確認、コンセンサス率を記録

付録:現場で使えるチェックリストとコード片

まずは下のチェックリストを1つずつ潰してください。

項目 やること
監視項目の棚卸し 現在計測している項目を書き出し、優先度を付ける
基準データの保存 過去30日など、基準期間を固定して分布を保存する
1つのドリフト指標導入 PSIまたはKSを1つ導入し、日次で算出する
簡易アラート設定 Slack通知とメール通知をまず設定する

短いPythonコード片(CSV出力用)

目的 コード(抜粋)
上位差分サンプルのCSV出力
import pandas as pd

# candidates: DataFrame with columns ['id','score','feature1',...]
candidates.sort_values('score').head(100).to_csv('suspect_samples.csv', index=False)
分布サマリのCSV
summary = data.describe(include='all').T
summary.to_csv('data_distribution_summary.csv')

想定読者のアクションプラン(この記事を読んだら今すぐやる3つ)

  1. 現行の監視項目を棚卸しし、監視すべきトップ3(入力分布、出力分布、主要ビジネスKPI)を決める。
  2. PSIかKSのどちらか1つを選び、今日から日次ジョブで算出してログを残す。
  3. Slackまたはメールで情報レベルの通知を設定し、閾値到達時の担当者を決める(まずは手動対応でよい)。

まとめ

モデル運用の次の一歩は「データとモデルの中身」を継続的に監視することです。まずは小さな指標(入力分布、出力分布、主要KPI)を選び、段階的な閾値で運用に馴染ませてください。PSIやKSといった手法は実装が容易で、業務に合わせて閾値を調整することで実用になります。再学習は自動化しつつも、初期は人の介入ポイントを明確にし、データとモデルのバージョン管理(DVC/MLflow)を併用することを推奨します。まずは本記事のアクションプランの3つを実施し、翌週には小さな改善サイクルを回してください。

第35回 AI×Pythonの自動化を実務運用へ落とし込む — スケジュールと監視、障害対応の実践ガイド

はじめに — まずはその「つまずき」に寄り添います

AIプロトタイプやスクリプトは動くけれど、定期実行すると止まってしまう、ログが読めない、障害時に誰が対応するか決まっていない──そんな現場の悩みに応えます。本記事は、AIモデルの出力をPythonで定期実行するワークフローを、スケジューリングから監視、障害対応、コスト管理まで「実務で回す」ための手順とテンプレートを提供します。まずは1週間の稼働試験を目標に読み進めてください。

導入シナリオ(例)

想定例:毎朝8時に外部APIでデータを取得し、AIで解析してCSVを生成、Slackへ結果を通知する処理。要件は「確実に毎日実行」「失敗検知と自動再試行」「コストを抑える」などです。

アーキテクチャの選定基準

  • 可用性:停止の許容時間はどれくらいか
  • 運用負荷:ローカルで運用できるか、クラウドに任せるか
  • 監視のしやすさ:ログ・メトリクスをどう集めるか
  • セキュリティ:APIキーや機密情報の管理方法
  • コスト:実行頻度とAPI利用量に基づく見積もり

スケジューリング比較

方式 向き・特徴 運用負荷 推奨場面
ローカル/サーバーcron シンプル、OS依存、単純なジョブに最適 中(ホスト管理必要) 少数の低頻度ジョブ
APScheduler Python内蔵で柔軟、複雑なスケジュール向け 中(プロセス監視必要) アプリ内スケジューラや動的ジョブ
Cloud Scheduler(GCP/AWS同等) マネージド、可用性高、スケール容易 低(クラウド運用が主体) 業務での安定稼働が必要なケース

簡単な例(cron用シェルとAPSchedulerのサンプル)

cron用(crontabに追加):

0 8 * * * /usr/bin/python3 /opt/app/daily_job.py >> /var/log/daily_job.log 2>&1

APScheduler(アプリ内部):

from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('cron', hour=8, minute=0)
def daily_job():
    run_main()

if __name__ == '__main__':
    sched.start()

実行時のログ/メトリクス設計

ログとメトリクスは分けて考えます。ログは詳細トラブルシュート用、メトリクスは運用判断用です。

項目 内容(例) 用途
成功率 成功数/合計実行数(1h,1d) 障害検知、SLI
処理時間 平均・p95 性能劣化検知
API呼び出し数 外部APIのコール回数と課金見込み コスト監視
エラーログ(構造化) {“job”:”daily_job”,”error”:”タイムアウト”,”trace”:”…”} 自動解析と検索

ログ出力の簡単なPython例(構造化ログ):

import json, time

def log_event(level, msg, **kwargs):
    entry = {"ts": time.time(), "level": level, "msg": msg}
    entry.update(kwargs)
    print(json.dumps(entry))

障害検知と自動再試行

再試行戦略は失敗のタイプごとに分けます。ネットワーク等の一時的失敗は指数バックオフで再試行、永続的なエラーは即通知して手動対応へ。

簡易リトライデコレータ(説明付き):

import time
from functools import wraps

def retry(max_attempts=3, base_delay=2):
    def deco(f):
        @wraps(f)
        def wrapped(*a, **kw):
            for i in range(1, max_attempts+1):
                try:
                    return f(*a, **kw)
                except Exception as e:
                    if i == max_attempts:
                        raise
                    time.sleep(base_delay * (2 ** (i-1)))
        return wrapped
    return deco

アラートとエスカレーション

  • 閾値例:成功率90%未満でSlack通知、60%未満でメール+オンコール(担当者呼び出し)
  • 通知テンプレート(Slack): {“title”:”daily_job 失敗”,”env”:”prod”,”last_error”:”タイムアウト”}
  • Runbookテンプレ(簡易): 障害発生→ログ確認→再試行→影響範囲報告→ロールバック案実行

コストとAPI利用管理

APIの呼び出し数は定期的にレポートして上限を設けます。APIキーは環境変数かシークレットマネージャーで保護してください。予算超過の自動停止やレート制限エラーを想定した設計を入れます。

デプロイとロールバック(簡易手順)

  1. ローカルで単体テスト→コンテナ化(Dockerfile)
  2. GitHub Actionsでビルド→ステージングへデプロイ→自動テスト
  3. 本番へロールアウト(段階的)→問題あればタグを戻して再デプロイ

運用チェックリストとテンプレ

段階 チェック項目
導入前 要件確認、実行頻度、API課金見積、シークレット管理方針
導入直後(1週間) ログ量確認、成功率確認(目標95%)、監視アラート動作確認
定期点検(週/月) エラートレンド確認、コスト確認、Runbookの更新

簡易Runbook雛形(抜粋):

  • 発生時:まず最新の実行ログを取得(/var/log/…)
  • 再現:ステージングで同条件を再現し原因切り分け
  • 対応:再起動→再試行→ロールバックの順で対応
  • 報告:影響範囲、暫定対応、恒久対応予定をまとめて共有

付録:すぐ使えるテンプレ(チェックリスト抜粋)

項目 完了
シークレットを環境変数へ移行 [ ]
監視:成功率アラート設定 [ ]
1週間の稼働試験を開始(ログ監視) [ ]

まずの一歩(具体アクション)

  • 今週中にcronかCloudSchedulerで1ジョブを週次→1週間稼働させる
  • 成功率・処理時間のメトリクスを収集し、初回の閾値を設定する
  • Runbookを1ページで作り、担当者へ共有する

まとめ

AI×Pythonの業務運用は「動かす」だけでなく、「監視する」「障害時に誰が何をするか」を定めることが成功の鍵です。本記事はスケジュールの選び方、ログとメトリクスの設計、再試行とアラートの具体例、デプロイ/ロールバック手順、そして運用チェックリストを提示しました。まずは1週間の稼働試験を行い、ログと成功率を見ながら閾値や再試行方針を調整してください。

次回(シリーズ): 運用改善の自動化とABテスト — 実施後のフィードバックループを作る方法を扱います。

第34回 AIに仕事を任せるときは、最初に「完成形」を決めておく

AIに仕事を任せるとき、つい「とりあえずやってみて」と頼みたくなることがあります。

もちろん、それでうまくいく場面もあります。アイデア出しや、たたき台を作る段階では、それでも十分動きます。

しかし、実務になると、それではだんだん苦しくなってきます。

なぜかというと、完成形が決まっていない仕事は、途中でいくらでも話がぶれてしまうからです。

AIに指示を出して、出てきたものを見て、「やっぱりこうして」「いや、こっちを残して」「やはり別の形式で」と何度も直していると、結局、人間が整理できていなかっただけ、ということがよくあります。

だから、AIに仕事を任せるときは、最初に「完成した状態は何か」を決めておいた方がよいのです。

これは、細かいデザインまで全部決める、という意味ではありません。

少なくとも、
・最終的に何を作るのか
・何が残っていれば完成なのか
・どの形式で出てくればよいのか
この3つくらいは、先に決めておいた方がよいのです。

たとえば、CSVの整理ならわかりやすいでしょう。

単に「このCSVを整えて」と頼むのではなく、
「空欄行を削除し、メールアドレスの重複を除き、申込日の新しい順に並べ替え、必要な4列だけを残したCSVを新しいファイルとして出力する」
と決めておく。

これなら、完成形がかなりはっきりしています。

文章でも同じです。

「この内容を記事にして」ではなく、
「WordPress用の記事として、見出しつきで、読者は非エンジニア、長さは1500字前後、最後に次回につながる一文を入れる」
と決めておくと、ずいぶん違います。

画像でも同じです。資料でも、メール文でも、要約でも同じです。

AIは、途中の作業を助けるのが得意ですが、ゴールがあいまいだと、途中でどれだけがんばっても、最後の仕上がりがずれやすいのです。

つまり、AIを使うのが上手な人は、指示が上手というより、「完成形を先に言葉にしている人」なのです。

ここを飛ばしてしまうと、作業は増えます。

最初は気軽に頼めた気がしても、あとで修正を重ねることになり、かえって時間がかかる。しかも、修正が増えると、どこが最終版なのかもわかりにくくなります。

人に仕事を頼むときも同じでしょう。

ゴールが見えていないまま「いい感じでお願いします」と言われると、受けた側は困ります。AIも実は同じです。

もちろん、最初から100点の完成形を決める必要はありません。そこまで厳密でなくてもよい。

ただ、「こうなっていれば今回は終わり」という基準は持っておいた方がよいのです。

たとえば、
・この列だけ残っていればよい
・この順番になっていればよい
・この文字数に収まっていればよい
・この形式で保存されていればよい
といった基準です。

こうした基準があると、AIの出力を見たときに、良し悪しの判断が速くなります。

逆に、基準がないと、「なんとなく違う気がする」という感想しか出てこなくなり、修正の指示もあいまいになります。

するとまたAIも迷い、やり取りが増えます。

だから、AIに仕事を任せるときのコツは、最初から全部を細かく決めることではなく、「終わりの形」を先に置くことです。

完成形が見えていれば、そこまでの道筋はAIと一緒に考えればよい。
しかし、完成形が見えていないと、道筋もぶれやすいのです。

AI時代に必要なのは、作業を全部自分でやる力ではありません。どこに向かって進めばよいかを決める力です。

そして、その方向が決まるだけで、AIはかなり働きやすくなります。

AIに仕事を任せるなら、まず完成形を決める。これは地味ですが、とても大事な基本です。

第33回 AIに仕事を任せるなら、1回で通る指示を目指した方が早い

AIを使って仕事を進めていると、最初のうちはどうしてもやり取りが増えます。

「違う、そうじゃない」
「そこは消さないでほしい」
「並べ替えは日付順です」
「その列は残してください」
と、何度も言い直すことになる。

これは誰でも通る道ですし、最初から完璧に指示できる必要はありません。しかし、実務でAIを使うなら、だんだん目指すべき方向は見えてきます。

それが、「1回で通る指示」を増やしていくことです。

もちろん、現実には毎回1回で完璧に通るわけではありません。ですが、最初の指示の精度が上がるだけで、作業時間はかなり短くなります。

なぜかというと、AIとの仕事は、1回1回の修正が小さく見えても、積み重なると意外に時間を取られるからです。

しかも、修正が増えるほど、こちらの意図もぶれやすくなります。最初は「重複を消したい」だけだったのに、途中で「並び順も変えて」「列名も直して」「保存形式も変えて」と追加していくと、AIも全体像を取り違えやすくなります。

だから、本当は最初にまとめて伝えた方がよいのです。

たとえば、悪い指示はこうです。

「このCSVを使いやすくして」

これでは、何をもって「使いやすい」とするのかがわかりません。

少し良くなると、こうなります。

「空欄を消して、見やすくしてください」

前よりはましですが、まだあいまいです。空欄というのは空欄行なのか、空欄セルなのか。見やすいとは、列を減らすことなのか、並べ替えることなのか。それがわかりません。

さらに良い指示になると、こうなります。

「このCSVについて、空欄行を削除し、メールアドレスの重複を除き、申込日の新しい順に並べ替え、氏名・メールアドレス・商品名・申込日だけを残して、新しいCSVとして保存してください。」

ここまで書けば、かなり意図が伝わります。

つまり、1回で通る指示とは、特別に上手な日本語のことではありません。必要な処理が、順番に、抜けなく書かれている指示のことです。

ここで大事なのは、次の4点です。

1.何を対象にするのか
2.何をどう変えるのか
3.何を残して何を捨てるのか
4.最後にどう出力するのか

この4つが入ると、AIはかなり動きやすくなります。

逆に、このどれかが抜けると、あとで聞き直しや修正が増えやすいのです。

たとえば、「重複を消す」と言っても、何を基準に重複とするのかが必要です。メールアドレスなのか、氏名なのか、顧客IDなのかで結果は変わります。

「並べ替える」と言っても、何の順番なのかが必要です。日付の新しい順なのか、古い順なのか、地域順なのかで意味が違います。

「保存する」と言っても、元ファイルを上書きするのか、新しいファイルにするのかで安全性が変わります。

仕事では、この細かさが大事です。

AIは賢そうに見えるので、つい「そこはわかってくれるだろう」と思ってしまいます。しかし、実際には、そこをはっきりさせるだけで精度がかなり変わります。

だから、AIに仕事を任せるときは、長い指示を書くことを恐れない方がよいのです。短い指示がよいのではなく、必要なことが抜けていない指示がよいのです。

むしろ実務では、短すぎる指示の方が危ないことが多い。最初は楽でも、あとで何回も直すことになれば、結局そちらの方が非効率です。

AIとのやり取りで時間を節約したいなら、最初に少しだけ丁寧に整理して渡す。その方が、結果として早く終わります。

そして、この整理のしかたは、実はAIのためだけのものではありません。自分の仕事を見直す訓練にもなります。

何をしたいのか。
何を残したいのか。
どこまでやれば完了なのか。

それを言葉にできるようになると、AIへの指示も通りやすくなり、仕事そのものも整理されていきます。

AIに仕事を任せるというのは、ただ命令することではありません。こちらの考えを、相手が動ける形に変えることです。

その意味では、1回で通る指示を目指すことは、AIの使い方を覚えることでもあり、自分の仕事の組み立て方を見直すことでもあります。

これができるようになると、AIはかなり頼れる相手になってきます。

第32回 AIに仕事を任せるときは、あいまいな言葉を処理に直す

AIに仕事を任せるとき、最初に大事なのは「うまく頼むこと」です。

これは、単に丁寧に頼む、という意味ではありません。AIが処理しやすい形に仕事を言い換える、ということです。

多くの人は、AIに対して人に話すように頼みます。もちろん、それである程度は動きます。しかし、実務で使える精度に近づけようとすると、それだけでは足りません。

たとえば、CSVの整理を頼む場面でも、
「これを見やすくして」
「きれいにして」
「使いやすい形にして」
という頼み方では、AIもかなり困ります。

なぜかというと、「見やすい」「きれい」「使いやすい」が何を意味するのか、人によって違うからです。

ある人は不要な列を消したいのかもしれない。ある人は並び順を変えたいのかもしれない。ある人は表記ゆれを直したいのかもしれない。AIはそのあたりを推測して動いてくれますが、仕事では推測に頼りすぎると危ないのです。

だから、AIに仕事を任せる人は、「抽象的なお願い」を「具体的な処理」に直す必要があります。

たとえば、
・空欄の行を削除する
・メールアドレスが重複している行は1件にする
・申込日の新しい順に並べる
・氏名、メールアドレス、商品名、申込日だけ残す
このように言い換えるのです。

こうすると、AIはかなり正確に動けます。

ここで必要なのは、プログラムの知識そのものではありません。必要なのは、仕事の内容を「処理の単位」に分ける力です。

人間同士でも、仕事ができる人は指示が具体的です。「適当にやっておいて」ではなく、「ここをこう直して、これを先に出して、これは削除しておいて」と言います。AIに対しても、それは同じです。

むしろAIは、あいまいな空気を読むのが得意そうに見えて、実務ではそこが一番あぶない。何となく望みに近いものを作ってきても、細かいところがずれていることがよくあります。

だからこそ、任せる側に必要なのは、「いい感じにやって」を減らすことです。

AIを使いこなすというと、すごいプロンプトを書けることだと思われがちですが、実際にはもっと地味です。自分がやりたい作業を、小さな処理に分けて順番に並べる。それだけでかなり違います。

たとえば、
1.不要な列を削除する
2.空欄行を消す
3.重複をなくす
4.日付順に並べる
5.保存する
というように分ければ、AIはかなり扱いやすくなります。

この考え方は、CSVだけに限りません。文章の整理でも、画像の分類でも、問い合わせ対応でも同じです。

要するに、AIに仕事を任せるというのは、魔法の言葉を見つけることではありません。仕事そのものを整理することです。

そして、その整理ができる人ほど、AIを実務に組み込みやすいのです。

AI時代に必要なのは、全部を自分でやる力ではありません。何を、どの順番で、どこまで任せるかを決める力です。

その第一歩は、あいまいな言葉を処理に直すことから始まります。

第31回 CSVの整理ができるようになると、AIの使い道は一気に広がる

AIに仕事を任せたい、という話をすると、つい文章作成や企画書づくりの方に目が向きがちです。

もちろん、それもAIの大事な使い方です。しかし、実際の仕事の現場で時間を奪っているのは、案外もっと地味な作業だったりします。

たとえば、表の整理です。

顧客リストをまとめる。
申込データを整える。
売上表を並べ替える。
名前の表記ゆれを直す。
不要な列を削除する。
空欄の行を取り除く。

こういう作業は、一つひとつは難しくありません。しかし、件数が増えると、すぐに面倒になります。しかも、手作業でやると、意外にミスが出ます。

ここで、AIとPythonの組み合わせが効いてきます。

特に大事なのが、CSVです。

CSVというのは、簡単に言えば「表データをテキストで保存したもの」です。Excelで見れば普通の表ですが、AIやPythonにとっては非常に扱いやすい形式です。

だから、仕事を整理していくと、かなりの部分が「このCSVをどう加工するか」という話に変わっていきます。

ここが見えてくると、AIの使い道は一気に広がります。

たとえば、顧客リストがあるとします。そこに氏名、メールアドレス、都道府県、申込日、商品名などが入っている。

このとき、やりたいことはいくらでもあります。

東京の人だけを抜き出したい。
申込日の新しい順に並べたい。
同じメールアドレスの重複を消したい。
姓と名を結合して新しい列を作りたい。
不要な列を削りたい。

これを全部Excelでやってももちろんよいのですが、毎回同じような作業が出てくるなら、AIにPythonを書かせて処理した方が早い。

しかも、一度やり方が決まれば、次からはほとんど同じ指示で済みます。

ここで大事なのは、自分でPythonを全部書けることではありません。必要なのは、「何をしたいのか」を順番に言えることです。

たとえば、
1.空欄の行を削除する
2.メールアドレスの重複を消す
3.申込日の新しい順に並べる
4.必要な列だけ残す
このように処理を分けて考えられると、AIはかなり正確にコードを書いてくれます。

逆に、ただ「この表をきれいにして」と言うだけでは、何となく動くものは出てきても、仕事で使える精度にはなりにくいのです。

つまり、AIを使うときに必要なのは、曖昧なお願いではなく、処理の分解です。

そして、この「処理の分解」を一番練習しやすいのが、CSVの整理です。

なぜなら、結果が目で見てわかりやすいからです。並び順が変わった。不要な列が消えた。重複がなくなった。新しい列が増えた。どこが変わったかがすぐに確認できます。

これは、AIに仕事を任せる練習として非常に向いています。

最初から難しいシステム開発を考える必要はありません。まずは、毎日どこかで発生している「面倒な表作業」を見つけることです。

そして、それをAIにこう頼むのです。

「このCSVから空欄行を削除して」
「この列だけ残して」
「日付順に並べ替えて」
「同じメールアドレスを1件にまとめて」

これだけでも、かなり仕事になります。

むしろ、仕事の現場では、こういう地味な作業を速く正確に処理できることの方が価値が高い場合が少なくありません。

AIというと派手なことを期待しがちですが、実際には「人がやると面倒な単純作業」を次々に渡せるようになることの方が大きいのです。

CSVの整理ができるようになると、AIは単なる会話相手ではなく、実務の補助者になってきます。

そして、ここから先に進むと、CSVを読む、並べ替える、抽出する、集計する、別の形式で保存する、といった作業が少しずつつながっていきます。

そうなると、AIに任せられる仕事の幅はさらに広がります。

Pythonの勉強というと身構えてしまう人も多いのですが、入口はもっと小さくてよいのです。まずはCSVを整理する。この一点から始めるだけでも十分です。

AIに仕事を任せる力は、難しいコードを書く力ではありません。自分の仕事を、AIが処理できる形に置き換える力です。

CSVは、その最初の練習台としてとても優れています。

第30回 AIに仕事を任せる人が、最初に覚えるべきPythonの使い方

AIに仕事を任せる時代になったとはいえ、全部を日本語だけで指示して済むかというと、実際にはそうでもありません。

たしかに、AIはかなり多くのことを自然文で理解してくれます。文章を書かせる。表をまとめさせる。企画を考えさせる。このあたりは、かなりの精度で動きます。

しかし、仕事の現場でAIを本当に使おうとすると、途中で必ず出てくるのが、
「このデータを整えたい」
「この形式でまとめたい」
「同じ処理を何回もやりたい」
という場面です。

ここで必要になるのがPythonです。

ただし、ここで誤解してほしくないのは、Pythonを全部覚える必要はない、ということです。AIに仕事を任せる人が必要なのは、プログラマーになるためのPythonではありません。

必要なのは、
「AIが書いたPythonを見て、何をしているかがだいたいわかる」
「少しだけ修正したい時に、どこを直せばいいかわかる」
「自分の仕事に合わせて、AIに具体的に指示できる」
その程度です。

これだけで、AIの使い方は一段変わります。

たとえば、CSVファイルを扱う仕事は非常に多いものです。顧客リスト、売上データ、アンケート結果、在庫一覧、社員情報。多くの仕事は、結局CSVやExcelのような表データに行き着きます。

ここで、人が手で並べ替えたり、不要な列を削除したり、表記を直したりしていると、時間はいくらあっても足りません。一方で、AIに「このCSVのA列とB列を結合して、新しい列を作って」「空欄の行を削除して」「日付表記をそろえて」と頼めば、Pythonのコードを書いてくれます。

そのコードを実行すれば、手作業で30分かかる仕事が数秒で終わることもあります。

ここで重要なのは、自分でゼロからコードを書くことではありません。重要なのは、「何をさせたいか」を分解できることです。

たとえば、
・不要な行を消す
・必要な列だけ残す
・表記を統一する
・新しい列を作る
・並び順を変える
こういう処理に分けて考えられると、AIにかなり正確に指示できます。

逆に言うと、Pythonがわからないことそのものが問題なのではなく、処理を言葉で切り分けられないことの方が問題なのです。

だから、この塾では、文法を順番に全部やるという進め方はしません。for文を覚えて、if文を覚えて、関数を覚えて……と学校の授業のように進めても、実務ではなかなか使えるようにならないからです。

むしろ、
「こういう仕事を自動化したい」

「そのために必要なPythonは何か」

「AIにどう指示すればいいか」
という順番で考えます。

この順番にすると、必要な知識だけが頭に入ってきます。しかも、覚えたことがすぐ仕事に結びつきます。

たとえば、昔は print("hello") を見て「プログラミングの第一歩です」と言っていました。もちろんそれも間違いではありません。

でも、AI時代に本当に最初に必要なのは、helloを表示することではなく、「AIが出してきたコードを怖がらないこと」です。

画面に英語が並んでいる。カッコがついている。見慣れない記号がある。それだけで距離を置いてしまう人が多いのですが、実際にはAIがかなり補助してくれるので、昔ほど高い壁ではありません。

大事なのは、全部理解しようとしないことです。

最初は、
「これは画面に出している」
「これはファイルを読んでいる」
「これは表を並べ替えている」
このくらいの理解で十分です。

AIに仕事を任せる人は、細かい文法の暗記よりも、コードを目的ごとに読むことを先に覚えた方がよい。そして、そのための道具としてPythonを使う。これが一番現実的です。

これから先、この連載でも少しずつPythonの話を入れていきます。ただし、それは「言語の勉強」ではなく、「AIに仕事をさせるための共通言語」として扱います。

人が全部書く時代ではなくなりました。しかし、人が何もわからなくていい時代にもなっていません。

AIに任せる。でも、任せるために最低限のPythonは知っておく。その感覚を持てるようになると、仕事の進め方はかなり変わってきます。