How to Define a New Model Structure

The structure of the Bayesian Network in ConversionFlow is defined in the assets/config.yml file. This guide explains how to customize this structure to create your own models.

Understanding the Model Structure

The model is defined by two key components:

  • Nodes: These represent the stages or touchpoints in your customer journey.

  • Edges: These represent the causal relationships or transitions between the nodes.

Steps to Define a New Model

1. Name Your Model

First, give your new model a unique name in the model.name field of the config.yml file.

model:
  name: my_new_model_v1

2. Define the Nodes

The nodes are organized into groups that correspond to the stages of the customer journey. You can add, remove, or rename these groups and the nodes within them.

  nodes:
    start:
      - session_start
    engagement:
      - feature_engagement
      - video_view
    conversion:
      - add_to_cart
      - purchase

3. Define the Edges

The edges define the structure of your Bayesian Network. Each edge is a list of two nodes, representing a directed link from the first node (parent) to the second node (child).

  edges:
    - [session_start, feature_engagement]
    - [session_start, video_view]
    - [feature_engagement, add_to_cart]
    - [video_view, add_to_cart]
    - [add_to_cart, purchase]

4. Define the Priors

For each new edge you create, you need to define a prior distribution for its beta coefficient. This is done in the priors.beta_distributions section.

priors:
  beta_distributions:
    session_start:
      feature_engagement: { distribution: HalfCauchy, sigma: 5 }
      video_view: { distribution: HalfCauchy, sigma: 5 }
    feature_engagement:
      add_to_cart: { distribution: Normal, mu: 0, sigma: 2.5 }
    video_view:
      add_to_cart: { distribution: Normal, mu: 0, sigma: 2.5 }
    add_to_cart:
      purchase: { distribution: HalfCauchy, sigma: 10 }
  • Parent Node Name: The top-level key (e.g., session_start) is the parent node.

  • Child Node Name: The nested key (e.g., feature_engagement) is the child node.

  • Distribution: You can specify any PyMC distribution (e.g., Normal, HalfCauchy, StudentT) and its parameters.

5. Run the Pipeline

Once you have saved your new configuration, you can run the pipeline as usual. The BayesianNetworkModel class will automatically build the new model structure based on your definitions.

python src/orchestration/run_pipeline.py --config assets/config.yml --data your_data.db --output output_new_model

By following these steps, you can create custom Bayesian Network models to analyze any conversion funnel.