Cómo cargar datos a nivel geográfico cuando sí hay información de alcance y frecuencia

Se proporcionan datos simulados como ejemplo para cada tipo y formato de datos en las siguientes secciones:

CSV

Para cargar los datos de CSV simulados utilizando using CsvDataLoader, haz lo siguiente:

  1. Asocia los nombres de las columnas con los tipos de variables. Los tipos de variables obligatorios son time, geo, controls, population, kpi y revenue_per_kpi. En el caso de los canales de medios que no tienen datos de alcance y frecuencia, debes asignar su exposición y su inversión a las categorías de media y media_spend, respectivamente. Por el contrario, para los canales de medios que sí tienen datos de alcance y frecuencia, debes asignar su alcance, su frecuencia y su inversión a las categorías de reach, frequency y rf_spend, respectivamente. Para conocer la definición de cada variable, consulta Cómo recopilar y organizar tus datos.

    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. Asigna la exposición, el alcance, la frecuencia y la inversión de medios a los nombres de canal designados que deseas mostrar en el informe de dos páginas. En el siguiente ejemplo, Channel0_impression y Channel0_spend se relacionan con el mismo canal, Channel0. Asimismo, Channel4_reach, Channel4_frequency y Channel4_spend se relacionan con el mismo 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. Carga los datos con 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()
    

    Donde:

    • kpi_type es 'revenue' o 'non_revenue'.
    • PATH es la ruta de acceso a la ubicación del archivo de datos.
    • FILENAME es el nombre de tu archivo de datos.

Conjunto de datos Xarray

Para cargar el conjunto de datos Xarray simulado y serializado con XrDatasetDataLoader, haz lo siguiente:

  1. Carga los datos con pickle:

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

    Donde:

    • PATH es la ruta de acceso a la ubicación del archivo de datos.
    • FILENAME es el nombre de tu archivo de datos.
  2. Pasa el conjunto de datos a XrDatasetDataLoader. Usa el argumento name_mapping para asociar las coordenadas y los arrays. Procede a la asociación si los nombres incluidos en el conjunto de datos de entrada no coinciden con los nombres requeridos. Los nombres de coordenada obligatorios son geo, time, control_variable, media_channel y rf_channel, donde rf_channel designa los canales que tienen datos de alcance y frecuencia. Los nombres obligatorios de variables de datos son kpi, revenue_per_kpi, controls, population, media, media_spend, reach, frequency y 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()
    

    Donde:

    • kpi_type es 'revenue' o 'non_revenue'.

Ndarray de NumPy

Para cargar ndarrays de numPy directamente, usa NDArrayInputDataBuilder:

  1. Crea los datos en ndarrays de numPy separados.

    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. Usa un NDArrayInputDataBuilder para establecer la hora y las ubicaciones geográficas, así como para asignar nombres de canales o dimensiones según sea necesario en los datos de entrada de Meridian. Para conocer la definición de cada variable, consulta Cómo recopilar y organizar tus datos.

    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()
    

    Donde:

    • kpi_type es 'revenue' o 'non_revenue'.

DataFrame de Pandas o cualquier otro formato de datos

Para cargar otro formato de datos simulados (como excel) con DataFrameInputDataBuilder, haz lo siguiente:

  1. Lee los datos (como una hoja de cálculo de excel) en uno o más DataFrame de 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. Usa DataFrameInputDataBuilder para asociar los nombres de las columnas con los tipos de variables requeridos en los datos de entrada de Meridian. Para conocer la definición de cada variable, consulta Cómo recopilar y organizar tus datos.

    from meridian.data import data_frame_input_data_builder as data_builder
    
    builder = data_builder.DataFrameInputDataBuilder(
        kpi_type='non_revenue',
        default_kpi_column="conversions",
        default_revenue_per_kpi_column="revenue_per_conversion",
    )
    builder = (
        builder
            .with_kpi(df)
            .with_revenue_per_kpi(df)
            .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()
    

    Donde:

    • kpi_type es 'revenue' o 'non_revenue'.

A continuación, puedes crear tu modelo.