はじめに
本記事では、IBM Bob と共創して顧客解約予測アプリ開発を題材に、要件整理から可視化までを約1時間で進めた試作の記録を共有します。
データサイエンスに詳しくない筆者の視点で、複数モデルを比較しながら、短時間で動作する形まで整えていく過程を整理しました。
取り組みの背景や進め方、検証時の着眼点について、実際の画面(ダッシュボード)とあわせてご紹介します。
今回の取り組みで印象的だったのは、開発にかかった時間の短さです。
- プロンプト(指示書)の作成・壁打ち:約30分
- コーディング依頼から完成まで:約30分
合計で 1時間足らず で、ひととおりの実装と動作確認まで進めることができました。
以下は今回の開発の大まかな流れを簡単に整理したものです。
IBM Bob とは?
IBM Bob は、IBM が提供する AI パートナーです。
単純にコード生成を行うだけでなく、
対話を通じて要件整理を支援し、構成案の検討から実装、実行時エラーへの対応まで、
開発プロセス全体を補助することを目的としています。
(現時点 Early Access, もうすぐ General Available です)
開発環境
- AIパートナー: IBM Bob
- フレームワーク: Streamlit
- 使用ライブラリ: Scikit-learn, LightGBM, Plotly, Pandas
- 実行環境: macOS (Local)
準備:プロンプトの作成
実装の精度を左右するのはプロンプトの質です。
要件を言語化するため、チャットAI を相手に約30分間の壁打ち/対話を実施しました。
思考を形にする対話のステップ
最初は漠然とした質問からスタートし、徐々に具体化していきました。
Q. 「業務予測モデルを作成し、それを簡単に実装するアプリを作成したいです。どのようなケースが考えられますか?」
Q. 「サンプルデータの取得、予測モデルの作成、アプリ実装までをコーディングするプロンプトを作成して」
わからない専門用語はその場でAIに解説してもらいながら、最終的に以下の「指示書」= プロンプト を練り上げました。
完成したプロンプト
このプロンプトには、Kaggleレベルの分析手法やビジネス視点での評価指標を含めています。
# 依頼内容
データサイエンス未経験のエンジニアでも、ビジネスの意思決定に即座に活用できる「高度な顧客解約予測(Churn Prediction)ベンチマークアプリ」を開発したいです。Kaggleのコンペティションで使われるような高度な分析手法を盛り込みつつ、Streamlitで完結するアプリを作成してください。
# 1. データ準備と特徴量エンジニアリング
- Kaggleの「Telco Customer Churn」を参考にしたダミーデータを2000件程度生成してください。
- 以下のプロの視点での「特徴量エンジニアリング」を実装してください:
- 「利用月数あたりの請求額(コスト負担感)」の算出
- 「利用月数あたりのサポート問い合わせ頻度」の算出
- 契約形態(Contract)のカテゴリ変数処理(One-hot encoding)
# 2. 複数アルゴリズムによる比較・評価
以下の3つの異なる性質を持つモデルを同一データで学習・評価してください:
- **ロジスティック回帰**(線形モデル:解釈性重視)
- **ランダムフォレスト**(アンサンブル学習:安定性重視)
- **LightGBM**(勾配ブースティング:精度重視)
# 3. 評価指標(Metrics)の算出
各モデルについて、以下の指標を算出し、Pandas DataFrameで一覧表として表示してください:
- Accuracy, Precision, Recall, F1-score, ROC-AUC
# 4. StreamlitによるアプリUIの構成
- **サイドバー:** 顧客の属性(契約月数、月額料金、累積請求額、サポート回数、契約形態)をユーザーが手動入力できるスライダーや入力フォームを設置。
- **予測結果エリア:** 「比較予測を実行」ボタンを押すと、3つのモデルがそれぞれ予測した「解約確率(%)」を並べて表示。
- **可視化エリア:**
- 各モデルの評価指標を比較するインタラクティブな棒グラフ(Plotly製)を表示。
- 選択したモデルの「特徴量の重要度(Feature Importance)」を可視化。
# 5. ビジネス・ナレッジの提供
実行結果の下に、以下の解説を日本語で出力するようにしてください:
- なぜモデルによって予測値が異なるのか(モデルの特性の違い)。
- ビジネスの状況に応じて、Precision(適合率)とRecall(再現率)のどちらを優先すべきかの判断基準。
# 出力形式
1. `requirements.txt`
2. `app.py`(1ファイル完結)
3. 仮想環境(venv)の構築からアプリ起動(streamlit run app.py)までの手順
IBM Bob での実装
Bob にプロンプトを入力して、Plan モードで実装計画を考えてもらいます。
実装計画
🎯 実装計画の詳細
1. データ生成とプリプロセシング
ダミーデータの仕様(2000件)
- customerID: 顧客ID
- tenure: 契約月数(1-72ヶ月)
- MonthlyCharges: 月額料金(20-120ドル)
- TotalCharges: 累積請求額
- Contract: 契約形態(Month-to-month, One year, Two year)
- TechSupport: テクニカルサポート利用(Yes/No)
- InternetService: インターネットサービス(DSL, Fiber optic, No)
- PaymentMethod: 支払い方法
- Churn: 解約フラグ(0/1)
特徴量エンジニアリング
ChargesPerMonth: TotalCharges / tenure(コスト負担感)
SupportCallsPerMonth: サポート問い合わせ頻度の算出
Contract_OneHot: 契約形態のOne-hot encoding
TenureGroup: 契約期間のカテゴリ化(新規/中期/長期)
2. 機械学習モデルの実装
モデル1: ロジスティック回帰
特性: 線形モデル、解釈性が高い
用途: 各特徴量の影響度を明確に把握したい場合
実装: sklearn.linear_model.LogisticRegression
モデル2: ランダムフォレスト
特性: アンサンブル学習、過学習に強い、安定性が高い
用途: バランスの取れた予測が必要な場合
実装: sklearn.ensemble.RandomForestClassifier
モデル3: LightGBM
特性: 勾配ブースティング、高精度、高速
用途: 最高精度を求める場合
実装: lightgbm.LGBMClassifier
3. 評価指標の算出
各モデルについて以下を計算:
Accuracy: 全体の正解率
Precision: 解約予測の適合率(予測した解約のうち実際に解約した割合)
Recall: 解約予測の再現率(実際の解約のうち予測できた割合)
F1-score: PrecisionとRecallの調和平均
ROC-AUC: ROC曲線下の面積(モデルの識別能力)
4. Streamlit UIの構成
┌─────────────────────────────────────────────────┐
│ 🎯 顧客解約予測ベンチマークアプリ │
├──────────────┬──────────────────────────────────┤
│ サイドバー │ メインエリア │
│ │ │
│ 📊 顧客属性 │ 📈 モデル比較結果 │
│ - 契約月数 │ ┌──────────────────────────┐ │
│ - 月額料金 │ │ 3モデルの予測確率 │ │
│ - 累積請求額 │ │ - ロジスティック回帰: XX%│ │
│ - サポート回数│ │ - ランダムフォレスト: XX%│ │
│ - 契約形態 │ │ - LightGBM: XX% │ │
│ │ └──────────────────────────┘ │
│ [予測実行] │ │
│ │ 📊 評価指標比較(棒グラフ) │
│ │ 📊 特徴量重要度(選択モデル) │
│ │ │
│ │ 💡 ビジネスナレッジ解説 │
└──────────────┴──────────────────────────────────┘
5. ビジネスナレッジの内容
モデルの特性の違い
ロジスティック回帰: 線形関係を仮定、解釈が容易
ランダムフォレスト: 非線形関係を捉える、安定性が高い
LightGBM: 複雑なパターンを学習、最高精度
Precision vs Recall の判断基準
Precision重視: リテンション施策のコストが高い場合(確実な解約予測者にのみ施策)
Recall重視: 顧客損失のコストが高い場合(解約の可能性がある顧客を広く拾う)
6. ファイル構成
churn-prediction-app/
├── requirements.txt # 依存ライブラリ
├── app.py # メインアプリケーション(全機能統合)
└── README.md # セットアップ手順書
7. 実装の流れ(app.py内の構造)
# 1. ライブラリインポート
# 2. ダミーデータ生成関数
# 3. 特徴量エンジニアリング関数
# 4. モデル学習・評価関数
# 5. Streamlit UI構築
# - サイドバー(入力フォーム)
# - メインエリア(予測結果、可視化)
# - ビジネスナレッジ解説
📦 必要なライブラリ(requirements.txt)
streamlit>=1.28.0
pandas>=2.0.0
numpy>=1.24.0
scikit-learn>=1.3.0
lightgbm>=4.0.0
plotly>=5.17.0
🚀 セットアップ手順
# 1. 仮想環境の作成
python -m venv venv
# 2. 仮想環境の有効化(macOS/Linux)
source venv/bin/activate
# 3. 依存ライブラリのインストール
pip install -r requirements.txt
# 4. アプリケーションの起動
streamlit run app.py
🎨 実装の特徴
1ファイル完結: すべての機能をapp.pyに統合
再現性: 固定シードでダミーデータを生成
インタラクティブ性: Plotlyによる動的グラフ
教育的価値: ビジネス視点での解説を含む
実用性: 実際のビジネス判断に使える評価指標
理解して実装計画を出してくれました。
追加機能についても提案がありました。賢い!
トラブルシューティングの自動解決
実装の途中で、Mac環境特有のLightGBMの依存関係(libomp)によるエラーや matpotlib のバージョン不整合エラーが発生しましたが、Bobはその場ですぐに解決策を提示し、requirements.txtや起動手順を更新していました。
Bob によるコーディングは、途中ファイル作成やコマンド実行の承認などで少々慎重に確認して実行していますが、10分もかからなかったと思います。
以下の構成でアプリケーションが完成しました。
最終的な成果物
## 📦 最終的なファイル構成
1. **requirements.txt** - 必要なライブラリ(matplotlib追加済み)
2. **app.py** - メインアプリケーション(717行、全機能統合)
3. **README.md** - 詳細なセットアップ手順書
## 🚀 起動方法(更新版)
```bash
# 1. macOSでの追加セットアップ(初回のみ)
brew install libomp
# 2. 仮想環境の作成と有効化
python3 -m venv venv
source venv/bin/activate
# 3. 依存ライブラリのインストール
pip install -r requirements.txt
# 4. アプリケーションの起動
streamlit run app.py
## ✨ 実装された全機能
### データ生成と特徴量エンジニアリング
- 2000件のKaggle風ダミーデータ
- ChargesPerMonth(コスト負担感)
- SupportCallsPerMonth(サポート頻度)
- Contract One-hot encoding
- RiskScore(複合リスク指標)
### 3つの機械学習モデル
- ロジスティック回帰(解釈性重視)
- ランダムフォレスト(安定性重視)
- LightGBM(精度重視)
### 評価指標と可視化
- Accuracy, Precision, Recall, F1-score, ROC-AUC
- カラーグラデーション付きDataFrame表示
- Plotlyインタラクティブグラフ
- 特徴量重要度の可視化
### Streamlit UI(4タブ構成)
- 📈 予測結果:3モデルの解約確率と推奨アクション
- 📊 モデル評価:評価指標の比較とモデル特性
- 🔍 特徴量分析:重要度とデータ統計
- 💡 ビジネスナレッジ:実践的な解説
すべての依存関係が解決され、アプリケーションは正常に動作します!
アプリ動作確認
本アプリは PoC / 分析検証用途として、ローカル環境で起動し動作を確認します。
$ python3 -m venv venv
$ source venv/bin/activate
(venv)$ pip install -r requirements.txt
(venv)$ streamlit run app.py
ブラウザで http://localhost:8501/ にアクセスすると分析ダッシュボードが立ち上がります。
本アプリでは、単一のアルゴリズムに依存せず、 性質の異なる複数モデルを同一データで学習・評価しています。
これは、単純な予測精度の比較に加え、
- どの要因が解約に影響していそうか
- モデルごとの予測結果の傾向や安定性
といった点を確認し、実務利用を想定した観点でモデルの挙動を見ていくためです。
各タブでは、モデルごとの特性や、 どの変数が解約に影響を与えているか(Feature Importance)が可視化されています。
以下は、分析ダッシュボードの全体像です。
-
ロジスティック回帰: どの変数が解約に影響したかという「説明性」を重視。
-
ランダムフォレスト: 外れ値に強く、予測の「安定性」を重視。
-
LightGBM: 複雑なパターンを捉え、精度を重視。
画像は省略しますが、ここで左のバーの値を変化させると、予測の% が変化します。
- モデル評価指標の比較
- ロジスティック回帰 特徴量分析
- ランダムフォレスト 特徴量分析
- LightGBM 特徴量分析
- ナレッジ
ここまで Bob に作成依頼を開始してから30分もかかっていません。
作成したコード
コードを下記で公開しています。
※本コードは現状有姿(AS-IS)で公開しており、動作保証はありません。検証環境等で十分テストの上、自己責任でご利用ください
アプリのデプロイ
streamlit の無料枠でアプリを公開しました。
https://customer-churn-predictor-git-auxvcsxxsw.streamlit.app
おわりに
今回、IBM Bob という AI パートナーを活用することで、
適切なプロンプト(要件の言語化)を準備できれば、未経験に近い領域であっても、 短時間で形にするところまで進められることを確認できました。
アプリの実装自体は、コーディング依頼から完成までがおよそ30分、 プロンプト検討を含めても1時間足らずで進めることができています。
このように「作る」部分のスピードが上がることで、 エンジニアに求められる役割や注力ポイントも、今後変化していくと感じました。
その中で、特に重要になると考えられる観点は以下のとおりです。
AI には補いきれない「ビジネス文脈」の整理
AI は与えられた指示に基づいて最適な結果を導き出しますが、 業務特有の制約や組織の運用ルール、背景にある意図までを自律的に理解することはできません。
顧客が本当に解決したい課題は何か、それをどのように要件へ落とし込むか、 そして開発したツールを既存のワークフローや文化にどう適応させるか、こうしたビジネス文脈の整理と調整は、今後も人が担う重要な役割だと考えます。
高速開発を支える管理と品質の維持
開発のハードルが下がる一方で、 コード品質の担保やアプリの増加に伴う管理・ガバナンスの重要性も高まります。
効率的に作れるからこそ、全体のアーキテクチャを俯瞰し、 技術的な一貫性を保つ視点が、これまで以上に必要となると思います。
エキスパートによるレビュー・監修の重要性
AI が生成したコードには、ドメイン知識の不足や想定外の抜け漏れが含まれる可能性があります。
実務へ適用していく際には、経験を持つエキスパートによるレビューや判断を組み合わせることで、より安全かつ実用的な活用が可能になると考えられます。
実業務への適用にあたっては慎重な姿勢が必要ではありますが、
IBM Bob にサポートしてもらいながら、アイディアを迅速に整理し、計画し、コードやアプリとして形にしていくプロセスは、とても楽しく学びの多いものでした。
ご参考になれば幸いです。







