LLMをファインチューニングしてテーブルデータの回帰問題に挑戦

はじめに

こんにちは、AIコンサルティンググループの中原輝樹です。

テーブルデータに対する回帰や分類問題は、機械学習の基礎的かつ多くの場面で活用できるテーマです。この分野では、XGBoostやLightGBMなどの勾配ブースティングモデルが高い性能を発揮し、実務やKaggleなどのデータ分析コンペティションで広く使われています。

一方で、近年では大規模言語モデル(LLM)の急速な発展が注目を集めています。強力なオープンソースモデルが次々と公開されるとともに、効率的なファインチューニング手法も登場し、タスクに応じて高性能なモデルをカスタマイズすることが可能になっています。

こうした背景から、私はテーブルデータに対する回帰や分類問題にLLMを応用することを試みました。テーブルのカラム名や特徴量の値には、多くの場合で文字列で表される言語的な情報が含まれています。これらの言語的な情報を直接LLMに入力することで、文脈理解に基づく予測が可能になるとともに、前処理作業の大幅な削減を実現できるのではないかと考えました。

この記事では、LLMでテーブルデータを扱うメリットや、私が実際にLLMを用いてテーブルデータの回帰問題に取り組んだ際のアプローチ、実験内容、および得られた予測精度についてご紹介します。また、従来手法との比較や、LLMのファインチューニングの実行コストを踏まえ、LLMの適用可能性についても考察します。

 

LLMでテーブルデータを扱うメリット

勾配ブースティングモデルなどのテーブルデータ向け機械学習モデルでは、高い予測性能を得るためには欠損値処理やカテゴリ変数のエンコーディング、ドメイン知識に基づく特徴量設計といった多くの前処理が欠かせません。また、カラム名や特徴量の値に含まれる言語的な情報を活用することができません。こうした中、テーブルデータの分類問題に対してLLMを適用した研究が報告されています。

LLMはカラム名や特徴量の値をそのまま文字列として文章中に埋め込んで入力できるため、以下のようなメリットがあります。

  • 前処理作業の削減
  • 文脈理解を活かした予測

 

LLMのファインチューニング

ファインチューニング(Fine‑Tuning) とは、事前学習済みのモデルに対し、正解ラベル付きの教師データを使って追加で学習を行い、特定のタスクへの性能を向上させる手法のことです。文章生成モデルであっても、タスクに最適化された出力層を付与することで回帰や分類タスクにも適用することができます。一方、モデルサイズが大きいほどGPUリソースや学習時間が増大するという問題があります。

こうした背景から、より少ない計算資源で効率的にファインチューニングを行うための手法が求められるようになっています。そこで注目されるのがPEFT(Parameter-Efficient Fine-Tuning)です。

PEFTの代表的な手法の一つにQLoRA(Quantized Low-Rank Adaptation)があります。QLoRAでは、まず事前学習済みモデルを4ビットに量子化し、メモリ使用量を大幅に削減します。さらに、LoRA(Low-Rank Adaptation)という手法により、元のモデルのパラメータを直接変更する代わりに、低ランクの行列を導入してパラメータの調整を行います。これにより、元のモデル性能をほぼ維持しつつ、少ない計算資源で効率的にファインチューニングを行うことが可能になります。

 

テーブルデータのテキスト化

テーブルデータをLLMで扱うには、各レコード(行)の情報をテキストに変換する必要があります。今回は次の3つのプロンプト形式を試しました。例として、物件情報データ(家賃予測)を使います。

エリア種別面積築年P家賃(万円)
東京都港区MS70H2540
大阪市北区MS50R220
福岡市中央区AP30H308

1. 文章形式
各カラムを「(カラム名)は(値)です。」のように並べる基本的な方法です。文脈情報があるため、LLMが理解しやすいメリットがあります。一方で、「種別」や「P」などのカラム名や値が説明なしでは意味が伝わりにくい問題もあります。

例:

Plaintext
エリアは東京都港区です。種別はMSです。面積は70です。築年はH25です。Pは無です。この物件の家賃を予測してください。
エリアは大阪市北区です。種別はMSです。面積は50です。築年はR2です。Pは有です。この物件の家賃を予測してください。
エリアは福岡市中央区です。種別はAPです。面積は30です。築年はH30です。Pは無です。この物件の家賃を予測してください。

2.文章形式(補足付き)
シンプルな文章に、カラムごとの補足情報を加えた形式です。カラムの意味がより明確になるため、特にデータ量が少ない場合や、専門用語が多い場合に効果的です。

例:

Plaintext
エリア(物件の所在地)は東京都港区です。種別(マンションはMS、アパートはAP)はMSです。面積(単位は平方メートル)は70です。築年(物件が建築された年の元号表記)はH25です。P(パーキング)は無です。この物件の家賃を予測してください。
エリア(物件の所在地)は大阪市北区です。種別(マンションはMS、アパートはAP)はMSです。面積(単位は平方メートル)は50です。築年(物件が建築された年の元号表記)はR2です。P(パーキング)は有です。この物件の家賃を予測してください。
エリア(物件の所在地)は福岡市中央区です。種別(マンションはMS、アパートはAP)はAPです。面積(単位は平方メートル)は30です。築年(物件が建築された年の元号表記)はH30です。P(パーキング)は無です。この物件の家賃を予測してください。

3.JSON形式
カラム名と値をペアにして、JSON風に記述する方法です。構造が明確で、トークン数を節約できるメリットがあります。ただし、カラム自体の意味付け情報は少なく、文脈理解にはやや不利な場合もあります。

例:

Plaintext
{"エリア": "東京都港区", "種別": "MS", "面積": 70, "築年": "H25", "P": "無"}
{"エリア": "大阪市北区", "種別": "MS", "面積": 50, "築年": "R2", "P": "有"}
{"エリア": "福岡市中央区", "種別": "AP", "面積": 30, "築年": "H30", "P": "無"}

 

実験

データセット選定

一般的なデータセット(例:Titanic)はLLMが事前に学習している可能性があり、汎化性能を測るには不向きです。そこで、2024年12月〜2025年3月に開催されたKaggleコンペ「CIBMTR - Equity in post-HCT Survival Predictions」のデータセットを使用しました。

このタスクでは、造血幹細胞移植(HCT)患者の生存率を予測します。モデルの評価にはC-indexという指標に基づく評価指標を使用しています。
スコアは0〜1の範囲を取り、以下のように解釈されます:

  • 0.5:ランダムな予測
  • 1.0:予測が完全に正しい
  • 0.0:予測が完全に外れている

※詳細な計算方法については、ここでは割愛します。

テーブルデータのテキスト化

各レコード(行)を「文章形式」「文章形式(補足付き)」「JSON形式」の3パターンでテキスト化しました。これにより、数値やカテゴリ情報をLLMが読み取れる形式にします。

テーブルの1行を1入力とし、正解ラベル(今回は生存率)を対応づけました。

ベースモデルの選定

使用するベースモデルには、Googleが開発した軽量かつ高性能なオープンソースモデルGemma2 9Bを選びました。Gemma2シリーズには2B、9B、27Bといったバリエーションがありますが、今回は性能とリソース消費のバランスから9Bを使用しました。

なお、Gemma2は本来テキスト生成用のモデルですが、Transformersライブラリの Gemma2ForSequenceClassification クラスを用いて、最終層を1次元出力に変更し、回帰問題に対応させました。

変更方法は非常にシンプルで、以下のコードで実装できます。

Python
model = Gemma2ForSequenceClassification.from_pretrained(
    model_path,
    num_labels=1,
    device_map="auto",
)

ファインチューニング手法

効率的なファインチューニングのため、QLoRAを利用しました。約3万件のトレーニングデータを各プロンプト形式ごとに別々のモデルとしてファインチューニングしました。

学習用のコードはKaggle Notebookで公開しているので、詳細を知りたい方はそちらをご参照ください。

従来手法との比較

LLM単体の評価だけでなく、以下の代表的なテーブルデータ向けモデルとも比較しました。

  • XGBoost:高精度な勾配ブースティングモデル
  • RandomForest:決定木ベースのアンサンブルモデル

これにより、LLMが現在の標準的な機械学習手法と比べてどの程度の性能を持っているのかを検証しました。なお、今回はカテゴリ変数のエンコーディングのみを行い、特別な欠損値処理や特徴量エンジニアリングは行わずにモデルの学習を行いました。

 

実験結果

プロンプト形式の比較

まず、異なるテキスト化方式による性能差を比較しました。

結果、最も高いスコアを記録したのは「シンプルな文章形式」でした。次いで、特徴量の補足情報を加えた「補足付き文章形式」が続きました。

一方、「JSON形式」は他と比べてややスコアが劣る結果となりました。

今回は比較的十分な学習データがあったため、補足説明がなくてもLLMが各特徴量の意味を十分に学習できたと考えられます。ただし、データ量が少ないタスクや特徴量の意味が複雑な場合は、補足情報の有無がより大きな影響を与える可能性もあります。

また、文章形式は、LLMの得意とする文脈理解や自然な言語構造を活かしやすいため、テーブルデータでも高い予測精度につながったと推測されます。

フォーマットスコア
文章形式0.67200
文章形式(補足付き)0.67010
JSON形式0.66209

 

従来手法との比較

次に、LLMと従来のテーブルデータ向けモデル(XGBoost、RandomForest)を比較しました。

比較の結果、XGBoostが最も高いスコアを記録し、LLMを上回る予測性能を示しました。今回はXGBoostに対して特別な欠損値処理や特徴量エンジニアリングを行わずに学習させましたが、それでもこのような結果が得られました。
これにより、テーブルデータの回帰タスクにおいては、依然としてXGBoostなどの勾配ブースティングモデルが非常に有力な選択肢であることがわかります。

一方、LLMはRandomForestより高いスコアを達成しました。LLMはパラメータ数が非常に多いため、十分に学習が進まないのではないかと懸念していましたが、RandomForestを上回る結果が得られたことから、タスクに適応できていたことがわかります。

さらに、テーブルデータをテキストに変換して入力しているLLMは、単純にルールを適用するRandomForestとは異なり、特徴量間の文脈を理解し、それを活かした予測ができていたと考えられます。

モデルスコア
XGBoost0.68039
LLM(文章形式)0.67200
RandomForest0.65721

  

実行コスト

QLoRAを用いてGemma2 9Bモデルのファインチューニングを行った結果、シンプルな形式のプロンプトを使用した場合の学習にかかった時間は約7時間、GPUメモリの使用量は約14GBでした※。また、推論時は1,000件のデータを予測するのに約2分かかりました。

QLoRAによるファインチューニングではモデルを量子化して読み込むため、大幅にメモリを削減することができました。Gemma2 9Bモデルは、モデルの読み込みだけで通常約36GBのメモリを必要としますが、4ビット量子化によって約4.5GBまで抑えることができました。

なお、今回はローカル環境(GPU: RTX 4090)で実行しましたが、クラウドGPUサービスのVast.aiを利用する場合、ファインチューニングにかかるコストは$2.45(約350円)で実行することができます。

※ 学習ステップ数を約6,500(batch_size=4、gradient_accumulation_steps=2)として実行しました。

 

まとめ

本記事では、LLMをファインチューニングし、テーブルデータの回帰問題に取り組んだ事例を紹介しました。

テーブルデータをテキスト化して実験を行った結果、プロンプト形式によって予測性能に差が出ることが確認できました。効率的な学習にはQLoRAを活用し、実行コストを抑えながらタスク適応を実現しました。

従来の機械学習モデルとの比較では、XGBoostが最も高い予測性能を記録し、テーブルデータにおいては依然として有力な手法であることが確認されました。一方で、LLMはRandomForestを上回る結果を出し、文脈理解を活かして一定の予測性能を発揮できることが分かりました。

LLMを用いた手法は、計算リソースや学習時間といったコスト面で課題があるものの、専門知識を必要とする前処理作業を削減できるという大きな利点があります。これにより、専門知識がなくてもテーブルデータの予測に取り組むことができ、より多くの人々がデータを活用できる可能性が広がります。

今後は、LLMのさらなる高性能化に加え、適切なプロンプト設計やファインチューニング技術の発展により、テーブルデータ分析におけるLLM活用が拡大していくことが期待されます。

 

筆者
AIコンサルティンググループ
中原輝樹