はじめに
トラストバンクでふるさと納税事業におけるパートナーアライアンスの事業責任者をやっている@imorisと申します。
サマリ
とあるシステムで数十万件を超えるデータのETLを行う必要がありました。継続的にETLが発生する場合、システム化して自動化するのが一丁目一番地ですが、時間軸的にどうにもならず、今までであればこれをSQL使える人がなんとかするというやり方だったところを、ChatGPTを使ってどんな人でもできるように標準化および属人化排除をしました。
背景
自身はエンジニア出身なので、CUIでデータ抽出して変換してAPI経由でアップロードしてみたいなことは自分でできるのですが、ビジネス側の人はCUIは基本使えないですし、スプレッドシートベースで処理したり、データ抽出班に依頼してETLを行うのが通常です。そのため以下のような問題が発生します。
- 自分でExcelやスプレッドシートで処理しようとするが、データが重すぎてスプレッドシートでは扱いきれない(フリーズしてしまう)
- じゃあということで、データ分析チームやDBを触れるエンジニアにお願いするが、彼らが非番の時や忙しい時に臨機応変に対応できない
- データ分析チームやエンジニアへの依頼の要件が正しく整理できていない場合があり、PDCAを何度も回せない(彼らに再作業をお願いすることになり迷惑をかけてしまうので気後れする)
イシューとアプローチ
というわけで、ここで解かなければいけないイシューは「短い時間軸でビジネス側の人間が気軽かつ迅速にトライ&エラーできるETL環境を作ること」です。
属人化をなすくためのアプローチは古来より色々あります。
- マニュアルを作る
- 勉強会をやる
- GUI化する
- 半自動化する
- 完全自動化する
ここで私が選択したのが、1.と3.と4.の組み合わせで、3.と4.の手法として採用したのがChatGPT Plusでした。
奇しくもChatGPT PlusでちょうどCode Interpreterがロンチされ、データ処理・ビジュアル化・Pythonコード生成ができるようになったタイミングでした(このタイミングで出てくれてめっちゃ助かった)。
具体例
まずはデータ処理のためのプロンプトを書いていきます。下記はエンコーディングも異なり、ファイルの形式もcsvとtsvで異なり、さらにtsvにはヘッダ行がないというケースで、この2ファイルの差分を抽出するというプロンプト例になります。
・A.csvはshift-jisでエンコードされています
・B.tsvはutf-8でエンコードされています
・A.csvでダブルクォーテーションはすべて取り除いてください。
・B.tsvにヘッダ行を追加してください1列目はcol1、5列目をcol2という名前にしてください。6列目以降は読み込みをスキップしてください。
・A.csvとヘッダ行を追加したB.tsvの2つのファイルを比較して、条件にマッチする特定の行を抽出してCSVファイルとして出力してください。条件は以下の通りです。
条件
・A.csvの1列目のカラムcol1と、B.tsvの1列目のカラムcol1がマッチするか確認する
・マッチした場合、A.csvの7列目のカラムcol7が1になっている行をまとめて抽出する
・A.csvにcol1にデータが存在しておらず、B.tsvのcol1にしかデータがない場合は、抽出対象外とする
・出力CSVの名前は「A_B_diff_YYYYMMDDHHMM」とする。その際YYYYMMDDHHMMは、B.tsvファイルの作成時刻を使う。
・ファイル読み込み中にエラーが発生した場合その行はスキップして読み込みを続ける。ただしエラーが出た行だけ別のCSVファイルに出力する。
次に出力したCSVから2つ目のCSVを出力してください。
条件は以下の通りです。
・CSVの出力カラムは、col1、col2の2つで、col2のデータにはすべて0を入れてください。
・出力CSVの名前は「C_upload_YYYYMMDDHHMM」としてください。YYYYMMDDHHMMは、B.tsvファイルの作成時刻を使ってください。
・出力CSVはshift-jisでエンコードしてください。
最後に抽出した件数を教えてください。
こうしたプロンプトを実際にChatGPT使ってトライ&エラーしてプロンプトをチューニングしていき、再現性が高い状態にもっていきます。
その上で、利用マニュアル(データをどこから持ってくるのか、ChatGPTのNew Chatを新たに作るのか/作らなくてもいいのか、ChatGPTの結果は必ずしも正しくないので最後は人間の目で確認すること、などを書いたマニュアル)を用意しました。
やってみた結果
プロンプト、利用マニュアル、ChatGPT Plusのアカウント(月20ドル)を整え、ビジネス側チームに展開したところ、入社1年目の非エンジニアの方でもマニュアルを見ながらコピペすれば数十万件のデータETLをすぐ実行できるようになりました。
これにより、SQLを使える数名の人しか対応できなかった状態が、社内にいる誰でもが同じ対応できる状態にすることができました。
一方でいくつかChatGPTならではの制限もありました。
- ChatGPTは1ファイルあたり最大で500MBのデータしかアップロードできない
- 全く同じファイル・プロンプトなのにうまく出力されない場合がある
- ChatGPTのモデルが変更されると動作が遅くなったり、ETLのロジックが勝手に変わったりする
- こうしたChatGPTの動きを理解してプロンプトを適宜チューニングするスキルがいる
一般的によく挙げられる制限ではありますが、それでもSQLをイチから覚えてCUIでデータ処理ができるようにするコストに比べると遥かにマシです。
AIによって変わる業務
今回やったことは少しChatGPTを業務導入したことがある人なら誰でも考えたりやってみたりする内容かと思います。やっていることはめちゃめちゃ単純です。しかし誰でもが数十万件のデータ処理を何もインストールせずGUIベースで手軽にトライできるというのは大きなメリットでした。
この手のAIによる業務効率化と属人化をなくしていく展開は社内/社外で大量にあると思われます。機密情報を含む内容だとまだまだセキュリティ的にどう対処していくのかは課題として残りますが、日々進化するAIでより複雑な処理もできるようになってきており、社会全体でやれるところから大きな変化がすぐに訪れることを実感した次第です。