オーガニック メディアとメディア以外のトリートメントがある地域レベルのデータを読み込む

それぞれのデータ型と形式の例として、シミュレートされたデータを次のセクションに示します。

CSV

CsvDataLoader を使用してシミュレートされた CSV データを読み込む手順は次のとおりです。

  1. 列名を変数型にマッピングします。必要な変数型は timegeocontrolspopulationkpirevenue_per_kpimediamedia_spend です。直接費用が発生しないメディア チャネルの場合は、メディア露出を organic_media に割り当てる必要があります。メディア以外のトリートメントの場合は、対応する列名を non_media_treatments に割り当てる必要があります。各変数の定義については、データの収集と整理をご覧ください。

    coord_to_columns = load.CoordToColumns(
        time='time',
        geo='geo',
        controls=['GQV', 'Competitor_Sales'],
        population='population',
        kpi='conversions',
        revenue_per_kpi='revenue_per_conversion',
        media=[
            'Channel0_impression',
            'Channel1_impression',
            'Channel2_impression',
            'Channel3_impression',
            'Channel4_impression',
        ],
        media_spend=[
            'Channel0_spend',
            'Channel1_spend',
            'Channel2_spend',
            'Channel3_spend',
            'Channel4_spend',
        ],
        organic_media=['Organic_channel0_impression'],
        non_media_treatments=['Promo'],
    )
    
  2. メディア変数とメディア費用を、2 ページの出力に表示する指定されたチャネル名にマッピングします。次の例では、Channel0_impressionChannel0_spend が同じチャネル Channel0 に接続されています。

    correct_media_to_channel = {
        'Channel0_impression': 'Channel0',
        'Channel1_impression': 'Channel1',
        'Channel2_impression': 'Channel2',
        'Channel3_impression': 'Channel3',
        'Channel4_impression': 'Channel4',
    }
    correct_media_spend_to_channel = {
        'Channel0_spend': 'Channel0',
        'Channel1_spend': 'Channel1',
        'Channel2_spend': 'Channel2',
        'Channel3_spend': 'Channel3',
        'Channel4_spend': 'Channel4',
    }
    
  3. 次のように CsvDataLoader を使用して、データを読み込みます。

    loader = load.CsvDataLoader(
        csv_path=f'/{PATH}/{FILENAME}.csv',
        kpi_type='non_revenue',
        coord_to_columns=coord_to_columns,
        media_to_channel=correct_media_to_channel,
        media_spend_to_channel=correct_media_spend_to_channel,
    )
    data = loader.load()
    

    ここで

    • kpi_type は、'revenue''non_revenue' のいずれかです。
    • PATH は、データファイルの場所へのパスです。
    • FILENAME はデータファイルの名前です。

Xarray データセット

シミュレートされた Xarray データセットXrDatasetDataLoader を使用して読み込むには:

  1. 次のように pickle を使用して、データを読み込みます。

    import pickle
    with open(f'/{PATH}/{FILENAME}.pkl', 'r') as fh:
      XrDataset=pickle.load(fh)
    

    ここで

    • PATH は、データファイルの場所へのパスです。
    • FILENAME はデータファイルの名前です。
  2. データセットを XrDatasetDataLoader に渡します。name_mapping 引数を使用して、座標と配列をマッピングします。入力データセットの名前が必要な名前と異なる場合は、マッピングを指定します。必要な座標名は geotimecontrol_variablemedia_channelorganic_media_channelnon_media_channel です。必要なデータ変数名は kpirevenue_per_kpicontrolspopulationmediamedia_spendorganic_medianon_media_treatments です。

    loader = load.XrDatasetDataLoader(
        XrDataset,
        kpi_type='non_revenue',
        name_mapping={'channel': 'media_channel',
                      'control': 'control_variable',
                      'organic_channel': 'organic_media_channel',
                      'non_media_treatment': 'non_media_channel',
                      'conversions': 'kpi',
                      'revenue_per_conversion': 'revenue_per_kpi',
                      'control_value': 'controls',
                      'spend': 'media_spend',
                      'non_media_treatment_value': 'non_media_treatments'},
    )
    
    data = loader.load()
    

    ここで

    • kpi_type は、'revenue''non_revenue' のいずれかです。

NumPy ndarray

numpy ndarray を直接読み込むには、NDArrayInputDataBuilder を使用します。

  1. データを個別の numpy ndarray に作成します。

    import numpy as np
    
    kpi_nd = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    controls_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    population_nd = np.array([1, 2, 3])
    revenue_per_kpi_nd = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    media_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    media_spend_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    organic_media_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    non_media_treatments_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    
  2. NDArrayInputDataBuilder を使って、時間と地域を設定し、メリディアンの入力データで必要に応じてチャンネル名またはディメンション名を指定します。各変数の定義については、データの収集と整理をご覧ください。

    from meridian.data import nd_array_input_data_builder as data_builder
    
    builder = (
        data_builder.NDArrayInputDataBuilder(kpi_type='non_revenue')
    )
    builder.time_coords = ['2024-01-02', '2024-01-03', '2024-01-01']
    builder.media_time_coords = ['2024-01-02', '2024-01-03', '2024-01-01']
    builder.geos = ['B', 'A', 'C']
    builder = (
      builder
        .with_kpi(kpi_nd)
        .with_revenue_per_kpi(revenue_per_kpi_nd)
        .with_population(population_nd)
        .with_controls(
          controls_nd,
          control_names=["control0", "control1"])
        .with_media(
          m_nd=media_nd,
          ms_nd=media_spend_nd,
          media_channels=["channel0", "channel1"]
        )
        .with_organic_media(
          organic_media_nd,
          organic_media_channels=["organic_channel0", "organic_channel1"]
        ).with_non_media_treatments(
          non_media_treatments_nd,
          non_media_channel_names=["non_media_channel0", "non_media_channel1"]
        )
    )
    
    data = builder.build()
    

    詳細は次のとおりです。

    • kpi_type は、'revenue''non_revenue' のいずれかです。

Pandas DataFrame またはその他のデータ形式

シミュレートされた他のデータ形式excel など)を DataFrameInputDataBuilder を使って読み込む手順は次のとおりです。

  1. データ(excel スプレッドシートなど)を 1 つ以上の Pandas DataFrame に読み込みます。

    import pandas as pd
    
    df = pd.read_excel(
        'https://github.com/google/meridian/raw/main/meridian/data/simulated_data/xlsx/geo_all_channels.xlsx',
        engine='openpyxl',
    )
    
  2. DataFrameInputDataBuilder を使って、列名をメリディアンの入力データで必要な変数型にマッピングします。各変数の定義については、データの収集と整理をご覧ください。

    from meridian.data import data_frame_input_data_builder as data_builder
    
    builder = (
        data_builder.DataFrameInputDataBuilder(kpi_type='non_revenue')
            .with_kpi(df, kpi_col="conversions")
            .with_revenue_per_kpi(df, revenue_per_kpi_col="revenue_per_conversion")
            .with_population(df)
            .with_controls(df, control_cols=["GQV", "Competitor_Sales"])
    )
    channels = ["Channel0", "Channel1", "Channel2", "Channel3", "Channel4"]
    builder = builder.with_media(
        df,
        media_cols=[f"{channel}_impression" for channel in channels],
        media_spend_cols=[f"{channel}_spend" for channel in channels],
        media_channels=channels,
    )
    builder = builder.with_organic_media(
      df,
      organic_media_cols = ["Organic_channel0_impression"],
      organic_media_channels = ["Organic_channel0"],
      media_time_col = "time"
    ).with_non_media_treatments(
      df,
      non_media_treatment_cols=['Promo']
    )
    
    data = builder.build()
    

    詳細は次のとおりです。

    • kpi_type は、'revenue''non_revenue' のいずれかです。

次にモデルを作成します。