BigQuery ML によって Google スプレッドシートで機械学習モデルを使用する方法
Google Cloud Japan Team
※この投稿は米国時間 2021 年 2 月 25 日に、Google Cloud blog に投稿されたものの抄訳です。
スプレッドシートは至るところで使用されています。きわめて便利な生産性向上ツールであるスプレッドシートを使えば、データの整理、計算、表示が簡単になります。Google スプレッドシートは Google Workspace に含まれているスプレッドシート アプリケーションであり、20 億人以上のユーザーが利用しています。
機械学習(ML)もまた、不可欠なビジネスツールになっています。データを用いた予測が低コストかつ高精度で実行できるようになったことで、複数の業界が一変しました。ビジネスでの機械学習の採用は、年間 40% 以上増加すると推定されています。
機械学習の力をスプレッドシート内のすべてのデータに取り入れる。合理的だと思いませんか?私は間違いなく思います。そして今、それを実現するためのツールができました。このブログ投稿で見ていきましょう。
全体像
BigQuery に組み込まれている BigQuery ML により、ユーザーは標準の SQL クエリを使用して機械学習モデルを作成できます。このブログ投稿では、BigQuery ML を使用して時系列予測モデルを作成する方法についてご説明します。時系列モデルの入力は過去の値のシーケンスであり、出力は将来の予測値のシーケンスです。
私がこの特定のタイプのモデルを選択したのは、時系列データがスプレッドシートできわめて一般的であるためです。売上、人員配置、業務指標などの数値を日付順に表すなど、さまざまなシナリオが考えられます。BigQuery ML を使用した需要予測の参照パターンの詳細については、こちらのブログ投稿をおすすめします。
このブログ投稿でご説明する内容は、あらゆるタイプの機械学習モデルに適用できます。BigQuery ML は、ニューラル ネットワーク、AutoML モデル、さらには TensorFlow モデルなど、さまざまなモデルタイプをサポートしています。モデルの構築方法を知る必要はなく、データを用意して、適切なオプションを選択するだけで済みます。モデルの構築とホストは BigQuery ML が行います。
モデルを構築するには、パターンを学習するためのトレーニング データが必要になりますが、そのデータは幸いにもスプレッドシート内に揃っています。コネクテッド シートを使用すれば、直接 BigQuery から大量のデータにアクセスして、常に最新の安全なデータを扱うこともできます。
スプレッドシートから BigQuery ML クエリを実行するには、クラウドベースの JavaScript プラットフォームである Apps Script を使用して Google Workspace を拡張します。Apps Script コードは、スプレッドシートから入力データを抽出し、トレーニングと予測を行うために BigQuery ML クエリを実行して、モデルからの予測でスプレッドシートを更新します。
問題
シナリオの例として、BigQuery 一般公開データセットの Google Analytics データを使用して e コマースサイトへのアクセス数を予測してみましょう。このデータセットは、12 か月のトラフィック、コンテンツ、トランザクション データで構成されています。1 時間ごとのウェブサイト訪問数のチャートを見てみましょう。
このデータセットには、複雑なパターンがいくつか含まれていますが、BigQuery ML の堅牢な予測機能でうまく処理できます。たとえば、1 日と 1 週間にわたる繰り返しパターン(日次と週次の季節性)があります。データには予測アルゴリズムが機能しない可能性のある値の急増も見られますが、BigQuery ML には、こうしたイベントを管理できる外れ値の自動検出機能が備わっています。
BigQuery のデータを使用する
この説明で使用するサンプルコードは、どこから来たデータでも処理します。BigQuery のビジネスデータにアクセスできる場合、コネクテッド シートを使って、スプレッドシート上のデータにアクセスするのがおすすめです。それでは見てみましょう。
[データ] メニューから [BigQuery に接続] を選択します。
コネクテッド シートを使用すると、スプレッドシートですでに使い慣れている機能(ピボット テーブル、グラフ、数式など)でビッグデータ インサイトを活用できるようになり、このインサイトは BiqQuery の新しいデータで自動的に更新できます。このシナリオでは、特定の時点のスナップショットでトレーニングされたモデルを作成します。これは簡単で、データを選択してから [解凍] を選択するだけです。
スプレッドシートから BigQuery ML モデルを使用する
スプレッドシートのユーザー インターフェースから BigQuery ML コマンドを実行する方法を見てみましょう。Google Workspace の ml-integration-samples から引用したコードサンプルについてご説明しながらその方法を示します。
シートからスクリプト エディタを開くと([ツール] > [スクリプト エディタ])、Apps Script コードを記述し、統合を構成できるようになります。このサンプルでは、スクリプトでの API の使用をサポートするために、BigQuery と Google スプレッドシートという 2 つの 高度なサービスを有効にしています。
まず、スプレッドシートに追加されたメニューを見て、プロジェクトのコードにどのようにリンクされているかを確認してみましょう。
スプレッドシートを開くと、onOpen() がトリガーされます。これによりメニュー項目が作成され、それぞれが関数にリンクされています。たとえば、[トレーニング] メニュー項目を選択すると、train() 関数が呼び出されます。
モデル トレーニング
提供されたカスタムデータでトレーニング関数がどのように機能するかを見てみましょう。ユーザーは、日付と予測するデータを含むデータ範囲をシートで選択します。トレーニング コードが Range オブジェクトに入力された値を抽出します。
次に、行が一時的な BigQuery テーブルに挿入されます。最後に、クエリが実行され、テーブル内のデータを使用して時系列モデルが作成されます。
次に、トレーニング コードによって生成される可能性のあるクエリの例を見てみましょう。モデルタイプ「ARIMA」(時系列用)と、一時テーブルのタイムスタンプ列とデータ列を指定します。BigQuery ML では追加オプション(休日など)を利用できますが、サンプルには含まれていません。
予測
予測を行うには、スプレッドシートでいくつかの行を選択してから、メニューで [予測] を選択します。スクリプトは、モデルで ML.FORECAST() 関数を呼び出し、選択した行数として horizon を指定します。
期間ごとに、次の 2 つのフィールドが予測から抽出されます。
日付、時刻、タイムゾーンを含む文字列としてフォーマットされた予測タイムスタンプ
そのタイムスタンプの予測値
3 つの行が選択されていると仮定すると、クエリは次のようになります。
実際の予測を見てみましょう。先週のデータが青で表示され、過去 3 日間の予測が赤で表示されています。
すべてを組み合わせる
Google スプレッドシートと BigQuery ML を組み合わせることで、スプレッドシート内の任意のデータに機械学習の力を活用できます。有意義なパターンを抽出するには、十分な高品質データが必要です。
このコードサンプルでは、日付と数値がある限り、トレーニング プロセスがさまざまな種類のデータに対応していることが分かります。必要に応じて、さまざまなモデルタイプで動作するようにサンプルを変更する、異なるオプションを使用する、さまざまなスプレッドシート レイアウトで作業するといったことも可能です。ビジネス ユーザーはそこからメニューを使用するだけで、新しいモデルを構築し、それで予測を行うことができます。
コードサンプルがプリインストールされているテンプレート シートを使えば、簡単に開始できます。コードサンプルの指示に沿って、ご自分でインストールすることも可能です。BigQuery ML をより実践的に体験する場合は、入門の Codelab をおすすめします。Google スプレッドシートと BigQuery ML により、皆様がこれまで以上に多くの問題を解決できることを願っております。
-デベロッパー アドボカシー担当マネージャー Karl Weinmeister