第14回 最終プロジェクト報告¶
科目:ビッグデータ応用Ⅱ〔特徴量エンジニアリング〕 担当:小野原彩香 対象:3年生(後期)
学習目標¶
この回では、以下のことを達成します。
- 構築した特徴量エンジニアリングパイプラインを第三者が再現できる形でまとめる
- 分析の手法選択・結果・技術的制約を論理的に発表できる
- 他の受講生の成果物に対して建設的なピアレビューができる
- 修了後の発展学習の方向性を把握する
1. 最終プロジェクトの要件¶
1.1 プロジェクトの概要¶
本プロジェクトは、地理空間LLMのログデータを対象とした特徴量エンジニアリングパイプラインの構築です。
第三者(採点者・同僚・将来の自分)が、手順に従って実行すれば同じ結果が再現できることが最低要件です。
1.2 必須の分析要素¶
以下の分析のうち、最低3つを実施してください。
| 分析 | 対応回 | 最低要件 |
|---|---|---|
| PCA | 第9回 | スクリープロット+バイプロット+次元数の選択根拠 |
| 時空間データキューブ | 第10回 | 時間×空間の集計テーブル+可視化2種類以上 |
| k-meansクラスタリング | 第11回 | 最適k選択プロセス+地図表示+クラスタ解釈 |
| PLS回帰 | 第12回 | VIPスコア+CV評価+残差の空間可視化 |
| DuckDB/Polarsパイプライン | 第13回 | SQL集計+空間関数の利用+Parquet永続化 |
2. 発表の構成¶
2.1 発表構成テンプレート(15分発表 + 5分質疑)¶
スライド構成の目安(10〜15枚):
スライド1:タイトル - タイトル(分析テーマを明確に) - 学籍番号・氏名 - 発表日
スライド2:問題設定と動機
記述すべきこと: - どのような問いに答えようとしたか - なぜその問いが重要か(地理空間LLMの文脈で) - 分析の対象(どの期間・地域・ログのサブセットを使ったか)
例:
「北海道の地名を含むクエリでエラーが多発している。地名あいまいさ以外にどのような空間的要因がエラー発生率と関連しているかを明らかにする。」
スライド3:データ概要
記述すべきこと: - 使用したデータの概要(レコード数、期間、地理的範囲) - 使用した特徴量のリスト(なぜその特徴量を選んだか) - 前処理の内容(欠損値処理、外れ値処理、標準化など)
例:使用データ
- LLMログ: 823,145件(2024/1/1〜2024/3/31)
- グリッドサイズ: 0.01度×0.01度(約1km格子)
- 有効グリッドセル数: 1,247セル(クエリ数20件以上)
- 特徴量: 11次元(密度系4、距離系2、時間パターン系3、その他2)
スライド4:手法選択の理由
記述すべきこと: - 実施した分析手法の一覧 - なぜその手法を選んだか(代替手法との比較) - パイプラインの全体像(データの流れ)
例:
「特徴量が11次元と多く多重共線性があったため、単純な重回帰ではなくPLS回帰を選択した。k-meansの前にPCAで次元削減を行い、距離指標の歪みを軽減した。」
スライド5〜9:分析結果
各分析手法につき1〜2枚。
必ず含めること: - 主要な可視化(グラフ・地図) - 数値的な評価指標(R²、シルエットスコア、累積寄与率など) - 「この結果は何を意味するか」の1〜2文の解釈
スライド10:技術的制約・課題
記述すべきこと: - 分析中に直面した問題と対処法 - モデルの限界(何が説明できなかったか) - データの制約(バイアス、サンプルサイズ、期間など)
例:
「農村部のグリッドセルはクエリ数が少なく、エラー率の推定が不安定だった。20件という閾値はやや恣意的であり、感度分析が必要だった。」
スライド11:今後の発展
記述すべきこと: - 今回できなかったが、やりたかったこと - 精度向上のために試すべきアプローチ - 実応用に向けた課題
スライド12:まとめ
- 問いへの答え(3行以内)
- 発見した知見のうち最も重要な1点
- 再現リポジトリのURL(または提出場所)
3. 再現リポジトリのチェックリスト¶
提出前に、以下をすべて確認してください。チェックが入らない項目がある場合、減点対象になります。
3.1 ディレクトリ構成¶
my_project/
├── README.md ← 必須:再現手順を記載
├── Makefile ← 必須:make allで全処理が再現可能
├── requirements.txt ← 必須:または environment.yml
├── data/
│ ├── README.md ← 必須:データの説明と入手方法
│ ├── llm_geo_logs.parquet ← 学内共有データ(コミット不要)
│ └── (中間データは .gitignore)
├── src/
│ ├── 01_build_cube.py ← DuckDB集計
│ ├── 02_feature_engineering.py
│ ├── 03_pca.py
│ ├── 04_kmeans.py
│ └── 05_pls_regression.py
├── notebooks/
│ └── exploratory_analysis.ipynb
├── output/
│ ├── figures/ ← 図の出力先
│ └── .gitkeep ← 空ディレクトリを保持
└── .gitignore
3.2 チェックリスト¶
READMEの内容
- [ ] プロジェクトの目的・問いが1段落で説明されている
- [ ] 動作環境(OS, Pythonバージョン)が明記されている
- [ ] セットアップ手順が記載されている(
pip install -r requirements.txtなど) - [ ]
make allでどのファイルが生成されるかが説明されている - [ ] 主要な出力ファイル(図・データ)の説明がある
Makefileの内容
- [ ]
make allを実行すると全パイプラインが再現できる - [ ] 依存関係が正しく記述されている(中間ファイルの前後関係)
- [ ]
make cleanで中間生成ファイルを削除できる - [ ] 各ターゲットにコメントが付いている
# Makefile 例
.PHONY: all clean setup
setup:
pip install -r requirements.txt
python -c "import duckdb; duckdb.connect().execute('INSTALL spatial;')"
data/cube_daily.parquet: data/llm_geo_logs.parquet
python src/01_build_cube.py
data/spatial_features.parquet: data/cube_daily.parquet
python src/02_feature_engineering.py
output/figures/scree_plot.png: data/spatial_features.parquet
python src/03_pca.py
output/figures/cluster_map.png: data/spatial_features.parquet
python src/04_kmeans.py
output/figures/vip_scores.png: data/spatial_features.parquet
python src/05_pls_regression.py
all: output/figures/scree_plot.png \
output/figures/cluster_map.png \
output/figures/vip_scores.png
clean:
rm -f data/cube_daily.parquet
rm -f data/spatial_features.parquet
rm -f output/figures/*.png
requirements.txtの内容
- [ ] バージョンが明記されている(例:
polars==0.20.3) - [ ] 実際に使ったライブラリが過不足なく記載されている
- [ ]
pip install -r requirements.txtでエラーなくインストールできる
# requirements.txt 例
duckdb==0.10.2
polars==0.20.15
pyarrow==15.0.2
geopandas==0.14.3
scikit-learn==1.4.1
matplotlib==3.8.3
seaborn==0.13.2
xarray==2024.2.0
shapely==2.0.3
numpy==1.26.4
pandas==2.2.1
jupyterlab==4.1.5
data/READMEの内容
- [ ] 各データファイルの説明(何のデータか、取得元)
- [ ] 使用するデータの入手方法(学内共有の場合はその旨と場所)
- [ ] 各ファイルのスキーマ(列名・型・説明)
- [ ] データの権利・使用上の注意(匿名化の内容など)
コードの品質
- [ ] 各スクリプトにdocstring(処理の説明)が記述されている
- [ ] ハードコードされたパスがない(
config.pyや環境変数で管理) - [ ]
main()関数がある(または実行順序が明確) - [ ] エラーメッセージが適切に出力される
出力サンプルの確認
- [ ]
output/figures/に少なくとも5枚の図がある - [ ] 図のファイル名が内容を表している(例:
scree_plot.png) - [ ] 図のDPI・サイズが適切(スライドに使えるクオリティ)
4. 発表当日のスケジュール¶
| 時間 | 内容 |
|---|---|
| 13:00〜13:10 | 趣旨説明・ピアレビューシートの配布 |
| 13:10〜14:20 | 発表セッション1(4名 × 20分) |
| 14:20〜14:30 | 休憩 |
| 14:30〜15:40 | 発表セッション2(4名 × 20分) |
| 15:40〜16:00 | ピアレビューの集計・全体ディスカッション |
| 16:00〜16:10 | 担当教員によるフィードバック・コースの振り返り |
発表の注意事項: - 発表は15分、質疑は5分(厳守) - スライドはPDF形式でUSBまたはメールで事前提出(前日12時締切) - 実行デモを行う場合は、事前に動作確認すること - Jupyterノートブックのデモは原則禁止(スライドに結果を貼り付けること)
5. 評価基準¶
5.1 評価ルーブリック(合計100点)¶
A. 再現性(20点)
| 点数 | 基準 |
|---|---|
| 18〜20 | make allで全処理が完全に再現できる。READMEが詳細で、別の人が初見で実行できる |
| 14〜17 | 概ね再現できるが、一部手動作業が必要 |
| 10〜13 | 再現できる部分とできない部分がある。説明が不十分 |
| 5〜9 | スクリプトはあるが、依存関係や手順が不明瞭で再現が困難 |
| 0〜4 | 提出物が不完全。再現がほぼ不可能 |
B. 空間特徴量の設計(20点)
| 点数 | 基準 |
|---|---|
| 18〜20 | 複数の視点(密度・距離・時間パターン・テキスト特性)から特徴量を設計し、選択の根拠が明示されている |
| 14〜17 | 適切な特徴量を複数設計しているが、選択根拠の説明がやや薄い |
| 10〜13 | 授業で扱ったデータをそのまま使用。独自の工夫が少ない |
| 5〜9 | 特徴量が少ない、または空間的な意味が説明されていない |
| 0〜4 | 特徴量エンジニアリングが実施されていない |
C. 分析の妥当性(20点)
| 点数 | 基準 |
|---|---|
| 18〜20 | 手法選択の理由が論理的。評価指標を適切に使用。限界を正直に記述している |
| 14〜17 | 手法は適切だが、評価や限界の記述がやや不足 |
| 10〜13 | 手法を実行しているが、なぜその手法か・結果の意味の説明が不足 |
| 5〜9 | 手法の使い方に誤りがある、または評価を行っていない |
| 0〜4 | 分析が実施されていない |
D. 可視化(15点)
| 点数 | 基準 |
|---|---|
| 13〜15 | 図が豊富で情報が整理されている。軸ラベル・タイトル・凡例が日本語で完備 |
| 10〜12 | 必要な図はあるが、一部が不完全またはラベルが不足 |
| 7〜9 | 図が少ない、または見づらい |
| 3〜6 | 図がほとんどない |
| 0〜2 | 可視化なし |
E. 考察(15点)
| 点数 | 基準 |
|---|---|
| 13〜15 | 結果の解釈が深く、地理的・技術的な文脈と結びついている。次のステップを具体的に提案している |
| 10〜12 | 結果の解釈はあるが、やや表面的。次のステップが漠然としている |
| 7〜9 | 結果の説明にとどまり、解釈・考察が不足 |
| 3〜6 | 考察がほぼない |
| 0〜2 | まとめなし |
F. プレゼンテーション(10点)
| 点数 | 基準 |
|---|---|
| 9〜10 | 時間を守り、聴衆に伝わる説明。質疑に的確に答えられる |
| 7〜8 | おおむね伝わるが、説明の順序や速さに改善点がある |
| 5〜6 | スライドを読み上げているだけ、または時間超過 |
| 3〜4 | 大幅な時間超過または発表が不完全 |
| 0〜2 | 発表なし |
5.2 ピアレビューのガイドライン¶
各発表に対して、以下の観点でコメントを記入してください。
記入シートの構成:
発表者:___________
レビュアー:___________
1. 最も良かった点(具体的に):
(自由記述、2〜3文)
2. 改善するとさらに良くなる点(建設的に):
(自由記述、2〜3文)
3. 特徴量設計について:
独創的だと感じた特徴量はありましたか?それはなぜですか?
(自由記述)
4. 技術的な発見(学んだこと):
この発表から自分の分析に活かせることは何ですか?
(自由記述、1〜2文)
5. 総合評価(5段階):
[ ] 5: 非常に優れている
[ ] 4: 優れている
[ ] 3: 標準的
[ ] 2: 改善が必要
[ ] 1: 大幅な改善が必要
ピアレビューのマナー: - 「〇〇が悪い」ではなく「〇〇をこうすると改善できる」という形で記述する - 発表者が傷つく個人的な批判は禁止 - 全員分の発表に対して、誠実にコメントを記入する(ピアレビュー自体が評価対象)
まとめ(コースの振り返り)¶
コース全体の到達点¶
| 回 | テーマ | 主要スキル |
|---|---|---|
| 第1〜4回 | 地理空間データの基礎 | GeoPandas, Shapely, 座標系変換 |
| 第5〜6回 | ログデータの前処理 | Polars, 欠損値処理, 時系列整形 |
| 第7〜8回 | 空間特徴量の抽出 | カーネル密度推定, 空間自己相関 |
| 第9回 | PCA | 次元削減, スクリープロット, バイプロット |
| 第10回 | 時空間キューブ | xarray, 時間集計, ヒートマップカレンダー |
| 第11回 | k-meansクラスタリング | 地域類型化, エルボー法, コロプレスマップ |
| 第12回 | PLS回帰 | VIPスコア, 交差検証, 残差分析 |
| 第13回 | DuckDB + Polars | 空間SQL, 高速集計, Makefile |
| 第14回 | 最終発表 | 再現リポジトリ, プレゼンテーション |
修了後の発展学習リソース¶
データベース・クエリ - PostGIS(PostgreSQL + 地理空間拡張):実務用途のスケールで使える本格的な地理空間DB - 公式ドキュメント:https://postgis.net/documentation/ - Apache Sedona(旧GeoSpark):Spark上の分散地理空間処理
大規模データ処理
- Dask:pandasのAPIで並列・分散処理
- pip install dask
- Apache Arrow + Parquet:高速なデータ形式と交換フォーマット
- Ray:分散機械学習パイプライン
GPU加速 - cuDF(RAPIDS):GPU上で動くDataFrame(Polarsより10〜100倍速いケースも) - 条件:NVIDIA GPU必須 - cuML:GPU上のscikit-learn互換機械学習ライブラリ
地理空間機械学習 - pysal:空間統計・空間計量経済学 - libpysal:空間重み行列の構築 - Spatially-aware ML:地理的加重回帰(GWR)
LLM・テキスト×地理空間 - GeoAI:地理情報×AIの研究領域 - GeoNLP:地名・空間表現の自然言語処理
可視化 - Kepler.gl:大規模地理データのインタラクティブ可視化 - Deck.gl:WebGLベースの地理可視化 - Folium:Pythonからleafletマップを生成
学習リソース - Geographic Data Science with Python(オープンテキスト):https://geographicdata.science/book - Spatial Data Science:https://spatialdata.science - DuckDB ドキュメント:https://duckdb.org/docs/
担当教員からのメッセージ¶
本コースを通じて、みなさんは「データを持ってくる」だけでなく、「データから意味のある特徴量を設計し、分析し、再現可能な形で伝える」という一連のサイクルを経験しました。
特に強調したいのは再現性です。分析結果がどれほど優れていても、他の人が確認できなければ科学的・工学的な価値は半減します。Makefile一発で再現できるパイプラインを書く習慣は、今後の研究・業務でも必ず役立ちます。
地理空間データとLLMの組み合わせは、まだ発展途上の領域です。本コースで学んだ手法と思考法を出発点に、ぜひ自分の問いを見つけてください。
お疲れさまでした。
提出物一覧: - スライド(PDF形式):発表前日12時まで - 再現リポジトリ(ZIPまたはGitHub URL):発表当日中 - ピアレビューシート:発表会終了後30分以内
作成:小野原彩香 / ビッグデータ応用Ⅱ〔特徴量エンジニアリング〕