Charger des données au niveau géographique avec la couverture et la fréquence

Des données simulées sont fournies à titre d'exemple pour chaque type et format de données dans les sections suivantes.

CSV

Pour charger les données CSV simulées à l'aide de CsvDataLoader :

  1. Mappez les noms de colonnes avec les types de variables. Les types de variables requis sont time, geo, controls, population, kpi et revenue_per_kpi. Pour les canaux média qui ne disposent pas de données de couverture et de fréquence, vous devez attribuer l'exposition média et les dépenses média aux catégories media et media_spend respectivement. À l'inverse, pour les canaux média qui disposent de données de couverture et de fréquence, vous devez mapper leur couverture, leur fréquence et les dépenses média sur les catégories de reach, frequency et rf_spend de façon proportionnelle. Pour connaître la définition de chaque variable, consultez Collecter et organiser vos données.

    coord_to_columns = load.CoordToColumns(
        time='time',
        geo='geo',
        controls=['GQV', 'Discount', 'Competitor_Sales'],
        population='population',
        kpi='conversions',
        revenue_per_kpi='revenue_per_conversion',
        media=[
            'Channel0_impression',
            'Channel1_impression',
            'Channel2_impression',
            'Channel3_impression',
        ],
        media_spend=[
            'Channel0_spend',
            'Channel1_spend',
            'Channel2_spend',
            'Channel3_spend',
        ],
        reach =['Channel4_reach', 'Channel5_reach'],
        frequency=['Channel4_frequency', 'Channel5_frequency'],
        rf_spend=['Channel4_spend', 'Channel5_spend'],
    )
    
  2. Mappez l'exposition média, la couverture, la fréquence et les dépenses média sur les noms de canaux désignés que vous souhaitez afficher dans la sortie sur deux pages. Dans l'exemple suivant, Channel0_impression et Channel0_spend sont connectés au même canal : Channel0. De plus, Channel4_reach, Channel4_frequency et Channel4_spend sont connectés au même canal : Channel4.

    correct_media_to_channel = {
        'Channel0_impression': 'Channel0',
        'Channel1_impression': 'Channel1',
        'Channel2_impression': 'Channel2',
        'Channel3_impression': 'Channel3',
    }
    correct_media_spend_to_channel = {
        'Channel0_spend': 'Channel0',
        'Channel1_spend': 'Channel1',
        'Channel2_spend': 'Channel2',
        'Channel3_spend': 'Channel3',
    }
    
    correct_reach_to_channel = {
        'Channel4_reach': 'Channel4',
        'Channel5_reach': 'Channel5',
    }
    correct_frequency_to_channel = {
        'Channel4_frequency': 'Channel4',
        'Channel5_frequency': 'Channel5',
    }
    correct_rf_spend_to_channel = {
        'Channel4_spend': 'Channel4',
        'Channel5_spend': 'Channel5',
    }
    
  3. Chargez les données à l'aide de 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,
        reach_to_channel=correct_reach_to_channel,
        frequency_to_channel=correct_frequency_to_channel,
        rf_spend_to_channel=correct_rf_spend_to_channel,
    )
    data = loader.load()
    

    Où :

    • kpi_type correspond à 'revenue' ou 'non_revenue'.
    • PATH est le chemin d'accès au fichier de données.
    • FILENAME est le nom de votre fichier de données.

Ensemble de données Xarray

Pour charger l'ensemble de données Xarray simulées sérialisé à l'aide de XrDatasetDataLoader :

  1. Chargez les données à l'aide de pickle :

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

    Où :

    • PATH est le chemin d'accès au fichier de données.
    • FILENAME est le nom de votre fichier de données.
  2. Transmettez l'ensemble de données à XrDatasetDataLoader. Utilisez l'argument name_mapping pour mapper les coordonnées et les tableaux. Fournissez un mappage si les noms de l'ensemble de données d'entrée sont différents des noms requis. Les noms de coordonnées requis sont geo, time, control_variable, media_channel et rf_channel, où rf_channel désigne les canaux disposant de données de couverture et de fréquence. Les noms des variables de données requises sont kpi, revenue_per_kpi, controls, population, media, media_spend, reach, frequency et rf_spend.

    loader = load.XrDatasetDataLoader(
        dataset,
        kpi_type='non_revenue',
        name_mapping={
            'channel': 'media_channel',
            'control': 'control_variable',
            'conversions': 'kpi',
            'revenue_per_conversion': 'revenue_per_kpi',
            'control_value': 'controls',
            'spend': 'media_spend',
            'reach': 'reach',
            'frequency': 'frequency',
            'rf_spend': 'rf_spend',
        },
    )
    
    data = loader.load()
    

    Où :

    • kpi_type correspond à 'revenue' ou 'non_revenue'.

ndarray Numpy

Pour charger directement des tableaux ndarray Numpy, utilisez NDArrayInputDataBuilder :

  1. Ajoutez les données dans des tableaux ndarray Numpy distincts.

    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]])
    reach_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    frequency_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    rf_spend_nd = np.array([
      [[1, 5], [2, 6], [3, 4]],
      [[7, 8], [9, 10], [11, 12]],
      [[13, 14], [15, 16], [17, 18]],
    ])
    
  2. Utilisez un module NDArrayInputDataBuilder pour définir l'heure et les données géographiques, ainsi que pour attribuer les noms requis aux canaux ou aux dimensions dans les données d'entrée de Meridian. Pour connaître la définition de chaque variable, consultez Collecter et organiser vos données.

    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_reach(
            r_nd=reach_nd,
            f_nd=frequency_nd,
            rfs_nd=rf_spend_nd,
            rf_channels=["channel0", "channel1"]
        )
    )
    
    data = builder.build()
    

    Où :

    • kpi_type correspond à 'revenue' ou 'non_revenue'.

DataFrame pandas ou autres formats de données

Pour charger un autre format de données simulées (par exemple, excel) à l'aide de DataFrameInputDataBuilder :

  1. Lisez les données (par exemple, une feuille de calcul excel) dans un ou plusieurs DataFrame pandas.

    import pandas as pd
    
    df = pd.read_excel(
        'https://github.com/google/meridian/raw/main/meridian/data/simulated_data/xlsx/geo_media_rf.xlsx',
        engine='openpyxl',
    )
    
  2. Utilisez un module DataFrameInputDataBuilder pour mapper les noms de colonnes aux types de variables requis dans les données d'entrée de Meridian. Pour connaître la définition de chaque variable, consultez Collecter et organiser vos données.

    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", "Discount", "Competitor_Sales"])
            .with_reach(
                df,
                reach_cols = ['Channel4_reach', 'Channel5_reach'],
                frequency_cols = ['Channel4_frequency', 'Channel5_frequency'],
                rf_spend_cols = ['Channel4_spend', 'Channel5_spend'],
                rf_channels = ['Channel4', 'Channel5'],
            )
    )
    
    data = builder.build()
    

    Où :

    • kpi_type correspond à 'revenue' ou 'non_revenue'.

Vous pouvez ensuite créer votre modèle.