はじめに
今回は2024年5月13日(米国時間)にOpenAIから発表されたGPT-4oを使って30分で簡単にダミーデータをつくります。 もちろん実際のデータは複雑な条件が重なり合った産物ですので、それに近づけようとすればするほど様々なパラメータを設定するだけではなく、その瞬間の偶然が重なりあうものです。 そのためダミーデータを作成しようと思ってもなかなか自分では取り掛かるのハードルが高いものでした。
そこで、グラフのプロットなど高度な分析やファイルでの入出力が可能となったと話題のGPT-4oを使用して誰でもダミーデータを作成できるのではないかという検証の記事となっております。
注意点として、このGPT-4oは無料ユーザーでも使用は可能ですが一日の回数制限があり同じように作成するのはかなり難しいと思います。実際にGPT-3.5では全然違う結果が返されたりしまいました。
ChatGPTとは何か
ChatGPTは、OpenAIによって開発された自然言語処理モデルの一つです。GPT(Generative Pre-trained Transformer)アーキテクチャに基づいており、膨大な量のテキストデータを学習することで、文脈に応じた自然な文章を生成する能力を持っています。
生成AIのしくみ
学習プロセスと生成プロセスに分けて生成AIのしくみを説明します。
1. 学習プロセス
生成AI、特にChatGPTは、以下のようなプロセスを通じて学習します
- 大規模データセットの使用:インターネット上の大量のテキストデータを収集し、これを元にモデルをトレーニングします。これにより、モデルは多様なトピックや文脈に対応する能力を獲得します。
- トランスフォーマーアーキテクチャ:GPTはトランスフォーマーと呼ばれるニューラルネットワークの一種を使用しており、これにより文脈を考慮した文章生成が可能になります。
- 自己教師あり学習:モデルは、部分的なテキストから次に来る単語やフレーズを予測するタスクを通じて学習します。これにより、文脈を理解し、自然な文章を生成する能力が向上します。
2. 生成プロセス
学習が完了した生成AIは、以下のようにして新しい文章を生成します
- 入力の理解:ユーザーからの入力(プロンプト)を解析し、その文脈や意図を理解します。
- 適切な応答の生成:学習データを元に、最も適切な応答を生成します。この際、文脈に沿った自然な文章を作成することを目指します。
- リアルタイム処理:入力から応答の生成までのプロセスは非常に高速で、リアルタイムでの対話が可能です。
何がすごいの?
生成AI、特にChatGPTが注目される理由は大きく分けて5つあります。
1. 自然な対話能力
ChatGPTは、ユーザーの入力に対して自然な言語で応答する能力があります。これにより、人間との対話のようなスムーズなコミュニケーションが可能となります。
2. 多用途性
ChatGPTは多様なトピックや用途に対応できます。例えば、質問応答、文章生成、要約、翻訳、さらにはクリエイティブな文章作成など、幅広い用途で利用されています。
3. 効率の向上
生成AIは、大量のデータを迅速に処理し、的確な情報を提供することができます。これにより、業務の効率が大幅に向上します。例えば、カスタマーサポートでの応答時間の短縮や、コンテンツ制作のスピードアップが実現します。
4. 学習と適応
生成AIは、継続的な学習と適応が可能です。新しいデータやフィードバックを取り入れることで、常に最新の情報を提供し、精度を向上させることができます。
5. クリエイティブなサポート
生成AIは、創造的な作業を支援する力を持っています。新しいアイデアの発想や文章の作成など、人間の創造性を補完するツールとしても活躍しています。
ChatGPTをはじめとする生成AIは、その高い言語理解力と生成能力により、さまざまな分野で革新的な役割を果たしています。今後もさらに進化し、より多くの応用が期待されています。
成果物
本記事で作成したダミーデータをみてもらいます。
カフェの支払手段別売上を想定しました。
ダミーデータより一部抜粋
date | total_sales | cash | credit | transport | paypay | id_pay | quickpay | coffee | latte | cake | sandwich | smoothie |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2013-01-06 | 101800 | 12600 | 38500 | 24400 | 7800 | 9300 | 9200 | 8400 | 21100 | 24700 | 15700 | 37000 |
2013-01-07 | 56800 | 8800 | 20300 | 12400 | 6500 | 3900 | 4900 | 11000 | 16100 | 17800 | 15200 | 11000 |
2013-01-09 | 64400 | 9000 | 19700 | 14900 | 10400 | 5700 | 4700 | 12500 | 19400 | 26700 | 13800 | 16100 |
2013-01-10 | 88600 | 18900 | 32200 | 17900 | 9200 | 5800 | 4600 | 6900 | 15400 | 11300 | 21000 | 30600 |
2013-01-11 | 79300 | 16500 | 29800 | 11300 | 10800 | 6500 | 4400 | 12200 | 15100 | 16100 | 17000 | 17700 |
2013-01-12 | 105000 | 17400 | 33500 | 21600 | 11700 | 10600 | 10200 | 14300 | 21000 | 26700 | 30100 | 23100 |
2013-01-13 | 123300 | 18700 | 39200 | 32300 | 17000 | 8300 | 7800 | 17100 | 14600 | 43900 | 34300 | 23300 |
2013-01-14 | 83700 | 19100 | 26200 | 21600 | 5800 | 4200 | 6800 | 12300 | 10900 | 19200 | 18900 | 13300 |
2013-01-16 | 62100 | 14200 | 15200 | 13500 | 7900 | 6900 | 4400 | 6700 | 14500 | 12000 | 22400 | 16200 |
2013-01-17 | 64100 | 9800 | 25400 | 11700 | 5200 | 5600 | 6400 | 6400 | 12300 | 14400 | 16000 | 23800 |
▼年間売上の棒グラフ
▼一年ごとの売上の折れ線グラフ
▼10年間の売り上げの折れ線グラフ
もちろん完璧なものではありませんが、短い時間でダミーデータを作成するという効率性としてはとても有意義だと思います。
このようなデータを可視化・分析することについては以下から
【ChatGPT-4o】店舗売り上げデータを可視化・分析してみた
プロンプトを知ろう
まず、ChatGPTを使う上で一番気にしなくてはいけないことはプロンプトです。
プロンプトとはユーザーがシステムに対して入力する、いわゆる指示・命令です。
相手によって物事の頼み方が違うように、ChatGPTにはChatGPTに伝わる頼み方があるということです。
ただ、プロンプトについては至ってシンプルです。
「より細かく言語化」すればいいだけです!
シンプルですね。(これがむずかしめなのですが…。)
例)
1. 具体的なデータ要件を示す:
生成したいデータの種類(例:名前、住所、電話番号、メールアドレス、製品情報など)。
データの形式(例:CSV、JSON、Excelなど)。
各データ項目の詳細(例:名前はフルネーム、住所は市区町村と郵便番号、メールアドレスは有効な形式など)。
2. データ量を明示する:
生成したいデータの件数(例:100件の顧客データ、500件の注文データなど)。
3. 特定の条件や制約を設定する:
特定の範囲や条件に基づくデータ(例:特定の期間内のデータ、特定の地域のデータなど)。
必要なユニーク性(例:メールアドレスや電話番号は重複しない)。
4. データの多様性を確保する:
複数のカテゴリやバリエーションを含むデータ(例:異なる職業や年齢層の人物データ)。
5. 使いやすい形式にする:
必要に応じて、特定のフォーマットやテンプレートに従う(例:住所は「都道府県、市区町村、番地」の形式にする)。
ここまで示すとかなり思っているものに近づけた形式にChatGPTも返してくれますね。
さらに解像度を良くしたい場合は
- ChatGPTがどのような立場なのか(大体はその問いの自分が置かれている状況)
- どのレベルの人に向けてのものを出力してほしいのか
- 「足りない情報やわからないことがありましたら聞いてください」といっておく
などを加えるとよりChatGPTとあなたとの間の認識の齟齬がなく良いものを出力してくれる傾向があります。
以上を踏まえた例
悪い例
- ダミーデータを作ってください。
- 何に関する、何のためのダミーデータなのかわからない
- 規模は?
- 業務形態は?
- 必要なカラムは?
- 期間は?
良い例
- 私は個人コーヒーショップの経営者です。
- 売上データを分析したいのですが分析手段を持たないのでまずはダミーデータを使って分析の練習がしてみたいです。
- コーヒーカフェにの売上のダミーデータを作成してください。
- 顧客の支払手段は現金、クレカ、交通系、PayPay、ID、QuickPayの6種です。
- 定休日は火曜、および祝祭日(土日は営業)
- 土日の顧客数は平日と比べ1.5倍程度
もちろんこれだけで良いダミーデータになるわけではないのですが、ChatGPTを使用する場合は、より詳しく言語化し情報を付け加えることを意識してください。人間では察知してくれるようなこともまだ察知してくれません。
腹を割って素直に要望を伝えきることが望んだアウトプットにつながるのです。
※ただし一度言ったから安心というわけではなく、修正を繰り返しているうちに条件が抜け落ちることもあるので再度命令をしてあげてください。
ダミーデータを作ってみよう
それでは、やっとダミーデータを作る流れに移ります。
手順は以下のようになります。
- シナリオを決める
- 必要なパラメータ(条件)を決める
- 出力、確認
- 条件を加えるなど調整する
- 繰り返し
- 完成
今回のテーマは「秋葉原にある個人経営のコーヒーカフェの売上」というダミーデータを設定します。
このテーマに対してシナリオを作ります。
シナリオがあるかないかでChatGPTに投げるプロンプトがより詳細になるので作りましょう。
シナリオ、条件の設定
正直すべてが利用されるかどうかは怪しいですが、確実に情報はあった方がそれっぽくなります。
最悪なんか違ったら修正すればいいのです(笑)
Excelファイルでの出力も可能です。
コードが回せる方であればコードを実行していただいても大丈夫です。
出力
はじめはこのように出力されました。
cafe_sales_data.xlsx
date | total_sales | cash | credit | transport | paypay | id_pay | quickpay |
---|---|---|---|---|---|---|---|
2023-01-02 | 82953 | 13992 | 31211 | 19711 | 8789 | 4624 | 4623 |
2023-01-04 | 78032 | 8929 | 29858 | 17617 | 9664 | 4082 | 7879 |
2023-01-05 | 68408 | 21319 | 19397 | 10909 | 5467 | 5216 | 6099 |
2023-01-06 | 69110 | 14911 | 20659 | 17789 | 5115 | 5168 | 5465 |
2023-01-07 | 110586 | 22945 | 42844 | 16792 | 12170 | 9554 | 6278 |
2023-01-08 | 108265 | 26581 | 28092 | 13561 | 17386 | 11793 | 10850 |
2023-01-11 | 67374 | 12873 | 17562 | 18947 | 7521 | 4488 | 5980 |
2023-01-12 | 71867 | 8550 | 30549 | 12140 | 9300 | 5246 | 6080 |
調整
パッと見良い感じですが、「商品の単価は100円刻みであり、売上は単価×個数」である以上すべてのセルの下二桁は00にならなくてはいけません。つ
まりいくつか注文が漏れてるということになります。
ここを指摘しましょう。
date | total_sales | coffee | latte | cake | sandwich | smoothie | cash | credit | transport | paypay | id_pay | quickpay |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2023-01-02 | 227600 | 30300 | 56800 | 32000 | 72600 | 77000 | 58900 | 77600 | 32200 | 25700 | 17900 | 15300 |
2023-01-04 | 189200 | 15600 | 28400 | 51000 | 30600 | 95900 | 59000 | 53700 | 30200 | 15100 | 14400 | 16800 |
2023-01-05 | 239600 | 41400 | 39200 | 70000 | 64800 | 63700 | 30500 | 110100 | 40900 | 16400 | 22500 | 19200 |
2023-01-06 | 169800 | 33900 | 20800 | 50000 | 33600 | 49000 | 35600 | 37900 | 54000 | 19900 | 12900 | 9500 |
2023-01-07 | 276400 | 15300 | 53200 | 70500 | 65400 | 84000 | 64000 | 105700 | 38800 | 25600 | 17000 | 25300 |
2023-01-08 | 307100 | 16500 | 41200 | 26500 | 61800 | 99400 | 72100 | 87100 | 70600 | 34200 | 19600 | 23500 |
2023-01-11 | 316000 | 36300 | 50800 | 68000 | 66600 | 62300 | 76300 | 99200 | 59000 | 30800 | 27900 | 22800 |
2023-01-12 | 171000 | 27000 | 31200 | 32000 | 56400 | 79800 | 23300 | 64400 | 40500 | 17900 | 11400 | 13500 |
下二桁が00に統一され、見やすくなりましたね。
次の調整は、売上高の数値です。
はじめのシナリオのところで一日の売上平均は8万円程度としましたが、現在は30万円を超えるような日もあるので修正しましょう。
date | total_sales | cash | credit | transport | paypay | id_pay | quickpay | coffee | latte | cake | sandwich | smoothie |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2023-01-02 | 81000 | 20100 | 23700 | 17700 | 9100 | 4900 | 5500 | 10700 | 10600 | 19400 | 23100 | 12100 |
2023-01-04 | 72500 | 12200 | 19300 | 19500 | 7700 | 5700 | 8100 | 5700 | 10000 | 11700 | 27300 | 36000 |
2023-01-05 | 57300 | 14600 | 18500 | 7700 | 5600 | 5700 | 5200 | 9800 | 11500 | 14900 | 26400 | 14000 |
2023-01-06 | 66100 | 9900 | 16400 | 20000 | 8400 | 6900 | 4500 | 7600 | 10500 | 11400 | 22300 | 26800 |
2023-01-07 | 107300 | 19700 | 27300 | 36300 | 9800 | 6900 | 7300 | 8800 | 27200 | 17600 | 33500 | 35200 |
2023-01-08 | 103900 | 22600 | 29200 | 20400 | 15000 | 10200 | 6500 | 8900 | 15400 | 23200 | 25300 | 50100 |
2023-01-11 | 90100 | 20300 | 26700 | 23200 | 5200 | 7600 | 7100 | 9500 | 19100 | 12500 | 22400 | 22100 |
2023-01-12 | 70100 | 17400 | 16900 | 18900 | 4900 | 6100 | 5900 | 8700 | 6900 | 17000 | 17500 | 20500 |
さらにこのタイミングで気が付いたのですが、お店は年末年始(12/28~1/5)は休業しているのにもかかわらず、データには1/2,4,5の売り上げが存在しているので修正しましょう。
(実はこの修正は一回ではできませんでした。 12/28~1/5などとまとめて書かず、「毎年1/1~1/5と12/28~12/31は休み」のように丁寧に書くことをおすすめします。)
date | total_sales | cash | credit | transport | paypay | id_pay | quickpay | coffee | latte | cake | sandwich | smoothie |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2013-01-06 | 101800 | 12600 | 38500 | 24400 | 7800 | 9300 | 9200 | 8400 | 21100 | 24700 | 15700 | 37000 |
2013-01-07 | 56800 | 8800 | 20300 | 12400 | 6500 | 3900 | 4900 | 11000 | 16100 | 17800 | 15200 | 11000 |
2013-01-09 | 64400 | 9000 | 19700 | 14900 | 10400 | 5700 | 4700 | 12500 | 19400 | 26700 | 13800 | 16100 |
2013-01-10 | 88600 | 18900 | 32200 | 17900 | 9200 | 5800 | 4600 | 6900 | 15400 | 11300 | 21000 | 30600 |
2013-01-11 | 79300 | 16500 | 29800 | 11300 | 10800 | 6500 | 4400 | 12200 | 15100 | 16100 | 17000 | 17700 |
2013-01-12 | 105000 | 17400 | 33500 | 21600 | 11700 | 10600 | 10200 | 14300 | 21000 | 26700 | 30100 | 23100 |
2013-01-13 | 123300 | 18700 | 39200 | 32300 | 17000 | 8300 | 7800 | 17100 | 14600 | 43900 | 34300 | 23300 |
2013-01-14 | 83700 | 19100 | 26200 | 21600 | 5800 | 4200 | 6800 | 12300 | 10900 | 19200 | 18900 | 13300 |
2013-01-16 | 62100 | 14200 | 15200 | 13500 | 7900 | 6900 | 4400 | 6700 | 14500 | 12000 | 22400 | 16200 |
2013-01-17 | 64100 | 9800 | 25400 | 11700 | 5200 | 5600 | 6400 | 6400 | 12300 | 14400 | 16000 | 23800 |
とてもいい感じになりました。
何回かプロンプトを書き直しているうちに乱数が変わり、数値が変わってしまいましたが分析前のダミーデータ作成のタイミングだったのでセーフです!笑
終わりに
ChatGPTの最新版GPT-4oではこのように、条件をうまく命令することができさえすれば、ここまでのダミーデータを簡単に作ることができることがわかりました。
分析手法の紹介の際に使われるダミーデータですが、現実味のないデータでは意味ないし、ちゃんとしたものを作ろうとすると変数などの設定が複雑でパッと作るのが難しいというのが以前までの印象でした。
しかし、今回コツは必要とはいえChatGPTを使用すれば簡単に作成することができることがわかり技術の革新をかなり感じました。
このようにダミーデータが簡単に作れると
- 実際のデータを使いにくい研修資料の制作ができない
- 出版本の例にするデータを作るのに時間がかかる
- 分析について学びたいけど分析する対象のデータがない
といった悩みが解消できます。
こういったデータはグラフとして可視化したり、分析することが可能です。 (むしろ可視化や分析をするためにこのような形なのですが。)
次の記事では実際にこのダミーデータを可視化・分析をしてみたというものになります。