NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    BigQuery MLの新機能「TimesFM」を試してみた

    はじめに

    ラスベガスから帰国後、アメリカのジャンキーなご飯と色の濃い飲料が恋しい、松村です。
    本ブログでは、前回投稿した記事(※1)にてご紹介した BigQuery ML の新機能のうちの一つ「TimesFM」(プレビュー版)を試した内容をまとめます。具体的には、TimesFM モデルと、WEB サイトの SEO(検索エンジン最適化)をサポートする無料ツール「Google Search Console」(※2) の BigQuery にエクスポートされたデータを組み合わせて、WEB サイト全体の検索パフォーマンスを予測する方法をご紹介します。
    (※1)【Google Cloud Next 2025 in Las Vegas】Day 2 参加レポート ~ BigQueryの未来 ~ - NRIネットコムBlog
    (※2)参考:Search Console の概要 - Search Console ヘルプ

    TimesFM とは

    TimesFM(※3)は、Google が開発した時系列データ予測のための基盤モデルです。基盤モデルというのは、特定のタスク専用ではなく、非常に大規模で多様なデータセットを使って事前にトレーニングされた汎用的なモデルのことを指します。
    TimesFMの場合、多種多様な実世界の1000億の時系列データポイントでトレーニングされているそうです。この膨大な学習量があるからこそ、私たちが個別に持っているデータに対して、追加のトレーニングやチューニングを行わなくても、ゼロショット(過去データを与えるだけ)で、将来の値を高い精度で予測できる能力を持っているのです。
    BigQuery上では、複雑な設定なしに SQL 上で、AI.FORECAST という関数を使用することで、この TimesFM を手軽に利用することができます。
    (※3)参考:A decoder-only foundation model for time-series forecasting

    TimesFM の一般的な利用シーン

    TimesFM は時系列データであれば、どのような分野のデータに対しても利用することができます。例えば、小売業であれば、商品の売上予測や在庫の最適化のために使用することができます。IT の分野では、サーバーリソース使用量の予測に使用することなども、一つの使用方法として考えることができます。
    そしてもちろん、今回私が試す WEB サイトの検索パフォーマンス予測も、その一つの選択肢であるというわけです。

    実際に使ってみた

    それでは、本題である TimesFM を使用して、Google Search Console のデータから WEB サイト全体の表示回数が今後どうなるかを予測してみます。今回は、Google Search Console のデータ(※4)を、BigQuery にエクスポートした際に使用できる「searchdata_url_impression」テーブルを使います。
    (※4)参考:テーブルのガイドラインとリファレンス - Search Console ヘルプ

    2025年1月1日以降のデータを使って、今後30日間の表示回数を予測したいと思います。
    使用する SQL (※5)は、以下の通りです。
    (※5)AI.FORECAST 関数の詳細:The AI.FORECAST function  |  BigQuery  |  Google Cloud

    SELECT *
    FROM
      AI.FORECAST(
        (
          SELECT
            data_date,
            -- 日付ごとに表示回数を合計
            SUM(impressions) AS num_impressions
          FROM
            -- 本 SQL を使用する場合はご自身のテーブル名に置き換えてください
            `{{projectid}}.{{datasetid}}.searchdata_url_impression`
          WHERE
            -- 予測の基にするデータの期間を入力
            data_date >= DATE('2025-01-01')
          GROUP BY data_date
        ),
        -- 予測期間を入力
        horizon => 30,
        -- 信頼区間のレベルを入力
        confidence_level => 0.95,
        -- 時間軸となるカラムを入力
        timestamp_col => 'data_date',
        -- 予測対象のデータカラムを入力
        data_col => 'num_impressions'
      )
    

    上記 SQL を実行すると、forecast_timestamp(予測対象日)、forecast_value(予測値)、そして信頼区間の下限・上限(prediction_interval_lower_bound, prediction_interval_upper_bound)などを含んだ結果が返ってきます。「グラフ」タブを確認すると、簡単に実行結果を時系列のグラフを確認することができます。
    SQL を使用するだけで、特別なモデル構築の手間なく、時系列データの予測ができました。実際やってみて、こんなにも簡単に使用できることに驚いています。

    予測精度を実測値と比較してみる

    さて、簡単に予測することはできましたが、「その予測ってどれくらい当たるの?」というのが、正直気になるところです。 そこで、TimesFM が出した予測値と、実際のデータ(実測値)を比較して、どの程度の精度なのかを確認してみました。

    具体的には、2025年1月1日から3月31日までのデータを基に、TimesFMで4月1日から4月10日までの10日間の表示回数を予測させました。そして、その予測結果と、実際に記録された4月1日から10日までの表示回数を比較します。

    比較のために、以下のようなSQLを実行しました。過去のデータ(実測値)と TimesFM による予測値を UNION ALL で縦に結合し、グラフ化しやすいように整形しています。

    -- 実測値を取得 (2025-04-01 から 2025-04-10)
    WITH historical AS (
      SELECT
        data_date AS date,
        SUM(impressions) AS num_impressions
      FROM
        `{{projectid}}.{{datasetid}}.searchdata_url_impression`
      WHERE
        data_date BETWEEN DATE('2025-04-01') AND DATE('2025-04-10')
      GROUP BY
        data_date
    )
    -- 実測値の整形
    SELECT
      date,
      -- 実測値
      num_impressions AS historical_value,
      -- 予測値 (NULL埋め)
      NULL AS forecast_value,
      -- データ種別
      'historical' AS type,
      -- 信頼区間下限 (NULL埋め)
      NULL AS prediction_interval_low,
      -- 信頼区間上限 (NULL埋め)
      NULL AS prediction_interval_upper_bound
    FROM
      historical
    UNION ALL
    -- 予測値を取得 (2025-01-01 から 2025-03-31 のデータで 10日間予測)
    SELECT
      DATE(forecast_timestamp) AS date,    -- 予測日
      -- 実測値カラム (NULL埋め)
      NULL AS historical_value,
      -- 予測値
      forecast_value AS forecast_value,
      -- データ種別
      'forecast' AS type,
      -- 信頼区間下限
      prediction_interval_lower_bound,
      -- 信頼区間上限
      prediction_interval_upper_bound
    FROM
      AI.FORECAST(
        MODEL => 'timesfm',
        DATA => (
          SELECT
            data_date,
            SUM(impressions) AS num_impressions
          FROM
            `{{projectid}}.{{datasetid}}.searchdata_url_impression`
          WHERE
            -- 予測に使用する過去データ期間
            data_date BETWEEN DATE('2025-01-01') AND DATE('2025-03-31')
          GROUP BY
            data_date
        ),
        OPTIONS => (
          -- 予測期間 (10日)
          horizon => 10,
          confidence_level => 0.95,
          timestamp_col => 'data_date',
          data_col => 'num_impressions'
        )
      )
    

    この SQL の結果を Looker Studio を使用してグラフにしてみると、以下のようになりました。 青い線が TimesFM による予測値、緑の線が実測値、そして点線が予測の信頼区間(95%)を示しています。グラフを見ると、予測値(青線)と実測値(緑線)が、近い動きをしているのが分かります。 もちろん、完全に一致しているわけではありませんし、日によっては少しズレも見られます。特に、実測値が急に跳ね上がった4月1日や4月7日あたりは、予測が少し追いついていない感じもあります。
    しかし、全体的なトレンドや変動のパターンは非常によく捉えられています。特別なチューニングもせず、SQL を1回実行しただけでこれだけの精度が出ることに、正直驚いています。
    TimesFM は「手軽に、そこそこ信頼できる未来予測を得たい」というニーズに対して、非常に有用な選択肢になるのではないかと思います。

    まとめ

    今回は、Google Cloud Next 2025 で発表されたばかりの BigQuery の新機能、TimesFM モデルを使って、Google Search Console のデータを使って、サイト全体の検索パフォーマンス予測とその精度検証を行ってみました。
    実際に触ってみて感じたのは、その「手軽さ」と「思った以上の精度」です。もちろん、TimesFM はまだプレビュー段階の機能ですが、現時点でも試してみる価値は十分にあると感じます。ぜひ皆さんも、BigQuery にあるデータを用いて、この新機能を体験し、予測や分析に活かしてみてください。
    ただし、予測や分析はあくまで手段ですので、「何のために予測するのか」「その結果をどうアクションに繋げるのか」という目的意識を持って、TimesFM を使うように気を付けましょう。
    例えば、今回の例で言えば「Web コンテンツのリニューアルによって、SEOパフォーマンスにどのような影響が出ていそうか確認したい」といった目的を持って TimesFM を使ってみる、などが考えられます。
    目的が明確であれば、予測結果の解釈や、次にとるべき行動も、より具体的になると思いますので、ぜひ、目的意識を持ってこの新しい技術と向き合い、皆さんのビジネスや分析業務に活かして頂ければと思います。

    執筆者松村 賢

    ジブリが好きなデジタルマーケティングコンサルタント