構造化データを作る
from データの理解と前処理
構造化データを自分で作らないといけないケース
機械学習で扱いたい問題に関連するデータが最初からきれいなテーブルデータ(構造化データ)になっていることは稀
以下に示される「ビッグデータ」と呼ばれるデータの多くは非構造化データ、あるいは構造化データであってもそのままでは機械学習のモデルの枠組みに当てはめられないものといえる
https://gyazo.com/a22b6183b98a3b50874dc091cc6c2acb
総務省Webサイト「ビッグデータとは何か」より引用(2022/6/1アクセス)
非構造化データ、複数に分かれたデータ、冗長なデータ、表記ゆれ等のある汚いデータなどから、機械学習が扱える状態のテーブルデータを作らないといけない
非構造化データから構造化データを作る場合
構造化データでないデータを非構造化データという
文章、画像、動画など
こうした非構造化データをもとに構造化データ(テーブルデータ)を作らないといけないケースも多い
要するに、非構造化データから特徴量を作る、というプロセス
たとえば、文章中に現れる「学校」「テスト」「成績」という3つの単語の出現回数をそれぞれ変数にする、のように、構造化データとして扱える形にするなど
なお、画像に関しては、線、線分、その位置や長さや曲率、色、等々からなる特徴量を、先見知識をもとにまず抽出し、その特徴量を説明変数として構造化データを作る、ということになるが、縦○ピクセル×横○ピクセルの各画素のデータをそのまま多次元の説明変数としてしまい、特徴抽出そのものを含めて学習してしまう、というのが深層学習のメカニズム
特徴量抽出が自動化できるところにブレークスルーがあった(といわれている)
機械学習ではそのまま扱えないテーブルデータを整理する場合
データとしてはテーブルデータの「形」で記録されていても、そのままでは使えない
要するに、「目的変数と複数の説明変数」が列に、1件1件のデータが行になっているようなテーブルデータを作らないといけない
たとえば、ショッピングサイトのシステムのログデータを扱う例でみてみると・・・
以下のような3つのテーブルがあるとする
学習データ:table
ユーザごとに、どの商品を買ったかのデータ(target=1が購入を示す)
https://gyazo.com/388b07364ed82b2ecc9a75b92412c678
商品マスタ:product_master
商品ごとに、商品カテゴリと価格をまとめたデータ
https://gyazo.com/cb8c3f6d3067f722390936200ec47805
ユーザのショッピングサイトの行動ログ:user_log
ユーザごとに、ショッピングサイトでいつどのような行動を行ったかを記録したログデータ
行動は、loginかview。viewは商品ごとのページの閲覧。
https://gyazo.com/70a2800a80afe7d986b5583dd8b655b3
これらのデータを処理して、以下のように「機械学習にかけるテーブルデータ」を作成する
https://gyazo.com/0636a175012f4f51ce269aba41541bdb
この例だと、targetが目的変数、その他の3つの変数が説明変数
この状態にするまでに、以下のような処理をしている
tableにproduct_masterの情報を結合する
user_logから、user_idごとのログの回数(user_count)を集計し、user_idごとにまとめる
そのuser_countをtableに結合する
tableから、不要なuser_idとproduct_idを削除する
このようなテーブルデータの処理は、Pandasライブラリの機能を使うとPython上で行うことができる
データの処理は慣れないとなかなかうまくいかないので、試行錯誤しつつ慣れよう
(近い将来、LLMがこのへんの処理は吸収してしまうと思うが・・・)
Excelなど表計算ソフトに慣れている場合は、そっちでやってしまってもよい
(参考)データの結合・特徴量の作成の表計算ソフトバージョン
さらに前処理
目的変数+複数の説明変数、という形の構造化データができたとしても、ほとんどの場合さらに前処理が必要
データの「汚さ」に対処することをデータクレンジング(データクリーニング)という
欠損値の処理
表記揺れ等の処理
機械学習アルゴリズムの性質にあわせた変数の変換も必要
標準化、正規化など