<img align="left" src="PySiMMMulator_logo.png" alt="logo" width="150"/>
# PySiMMMulator
[![CodeFactor](https://www.codefactor.io/repository/github/ryanaugust/pysimmmulator/badge)](https://www.codefactor.io/repository/github/ryanaugust/pysimmmulator)
[![PyPI Downloads](https://img.shields.io/pypi/dm/pysimmmulator.svg?label=PyPI%20downloads)](
https://pypi.org/project/pysimmmulator/)
PySiMMMulator is an open source Python adaption of the R-package [siMMMulator](https://github.com/facebookexperimental/siMMMulator), which allows users to generate simulated data to use in testing Marketing Mix Models (MMMs).
While this package cointains a full pipeline for data generation (configurable via .conf file) it can also be utilized in parts to generate select portions of MMM input data (ie campaign/channel spend)
## Installation
Accessable via PyPI
```bash
pip install pysimmmulator
```
## Usage
PySiMMMulator's simulator can either be run on a step-by-step basis, or can be run single-shot by passing a config file.
### Run via config
Run using this method, you'll be returned both a dataframe of for MMM input as well as the "True ROI" values for each of your channels. These true values are critical to validating your MMM model.
```python
cfg = load_config(config_path="./my_config.yaml")
sim = simmm()
mmm_input_df, channel_roi = sim.run_with_config(config=cfg)
```
### Run by stages
Alternatively you may run each of the stages independently, which allows for easier debugging and in-run adjustments based on the results of each stage. The order of the stages is reflected below **(without their inputs)**. Once you've run through every stage, results are available by calling the `sim.final_df` object (channel ROI results are stored as `sim.channel_roi`).
```python
sim = simmm()
sim.simulate_baseline()
sim.simulate_ad_spend()
sim.simulate_media()
sim.simulate_cvr()
sim.simulate_decay_returns()
sim.calculate_conversions()
sim.consolidate_dataframe()
sim.calculate_channel_roi()
sim.finalize_output()
```
### Run via CLI
A configuration file is required as input for this and should be passed as seen below. An output path can also be passed via `-o`, however when not passed the current working directory will be used.
```bash
pysimmm -i example_config.yaml -o .
```
## Development
Setting up a dev environment
```bash
conda create --prefix=./env python=3.11
conda activate ./env
pip install -e '.[dev]'
```
Raw data
{
"_id": null,
"home_page": null,
"name": "pysimmmulator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "Marketing, Media, Model, MMM, Simulate, SiMMMulator",
"author": null,
"author_email": "Ryan Duecker <ryan.duecker@yahoo.com>",
"download_url": "https://files.pythonhosted.org/packages/82/6f/a605d300967d068c6b001a491b8917e3cb8752fa36f557294bb437bac69c/pysimmmulator-0.4.2.tar.gz",
"platform": null,
"description": "<img align=\"left\" src=\"PySiMMMulator_logo.png\" alt=\"logo\" width=\"150\"/>\n\n# PySiMMMulator\n\n[![CodeFactor](https://www.codefactor.io/repository/github/ryanaugust/pysimmmulator/badge)](https://www.codefactor.io/repository/github/ryanaugust/pysimmmulator)\n[![PyPI Downloads](https://img.shields.io/pypi/dm/pysimmmulator.svg?label=PyPI%20downloads)](\nhttps://pypi.org/project/pysimmmulator/)\n\nPySiMMMulator is an open source Python adaption of the R-package [siMMMulator](https://github.com/facebookexperimental/siMMMulator), which allows users to generate simulated data to use in testing Marketing Mix Models (MMMs).\nWhile this package cointains a full pipeline for data generation (configurable via .conf file) it can also be utilized in parts to generate select portions of MMM input data (ie campaign/channel spend)\n\n## Installation\n\nAccessable via PyPI\n\n```bash\npip install pysimmmulator\n```\n\n## Usage\n\nPySiMMMulator's simulator can either be run on a step-by-step basis, or can be run single-shot by passing a config file.\n\n### Run via config\n\nRun using this method, you'll be returned both a dataframe of for MMM input as well as the \"True ROI\" values for each of your channels. These true values are critical to validating your MMM model.\n\n```python\ncfg = load_config(config_path=\"./my_config.yaml\")\nsim = simmm()\nmmm_input_df, channel_roi = sim.run_with_config(config=cfg)\n```\n\n### Run by stages\n\nAlternatively you may run each of the stages independently, which allows for easier debugging and in-run adjustments based on the results of each stage. The order of the stages is reflected below **(without their inputs)**. Once you've run through every stage, results are available by calling the `sim.final_df` object (channel ROI results are stored as `sim.channel_roi`).\n\n```python\nsim = simmm()\nsim.simulate_baseline()\nsim.simulate_ad_spend()\nsim.simulate_media()\nsim.simulate_cvr()\nsim.simulate_decay_returns()\nsim.calculate_conversions()\nsim.consolidate_dataframe()\nsim.calculate_channel_roi()\nsim.finalize_output()\n```\n\n### Run via CLI\n\nA configuration file is required as input for this and should be passed as seen below. An output path can also be passed via `-o`, however when not passed the current working directory will be used.\n\n```bash\npysimmm -i example_config.yaml -o .\n```\n\n## Development\n\nSetting up a dev environment\n\n```bash\nconda create --prefix=./env python=3.11\nconda activate ./env\npip install -e '.[dev]'\n```\n",
"bugtrack_url": null,
"license": "YEAR: 2024 COPYRIGHT HOLDER: Ryan Duecker",
"summary": "Python package for generating MMM (Marketing Mix Model) input data",
"version": "0.4.2",
"project_urls": null,
"split_keywords": [
"marketing",
" media",
" model",
" mmm",
" simulate",
" simmmulator"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1ab6fe73e53a61f0647f433fe74becf820691c13834daf98d7fdca34bc9f89fc",
"md5": "c21c1a3ef12b02da745967947ea0b010",
"sha256": "33f0d78974b1bc7cacc70d08dca534d621352735682c04a3715ba2594d5c39b8"
},
"downloads": -1,
"filename": "pysimmmulator-0.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c21c1a3ef12b02da745967947ea0b010",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 15785,
"upload_time": "2024-11-28T15:53:53",
"upload_time_iso_8601": "2024-11-28T15:53:53.432137Z",
"url": "https://files.pythonhosted.org/packages/1a/b6/fe73e53a61f0647f433fe74becf820691c13834daf98d7fdca34bc9f89fc/pysimmmulator-0.4.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "826fa605d300967d068c6b001a491b8917e3cb8752fa36f557294bb437bac69c",
"md5": "b7e0591e97bf75078aa5c724048384f6",
"sha256": "7caf21eab5c99fa12fba7d45f88da7fc724bb6debf3a54268b9c8dd71b90c090"
},
"downloads": -1,
"filename": "pysimmmulator-0.4.2.tar.gz",
"has_sig": false,
"md5_digest": "b7e0591e97bf75078aa5c724048384f6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 68485,
"upload_time": "2024-11-28T15:53:54",
"upload_time_iso_8601": "2024-11-28T15:53:54.559186Z",
"url": "https://files.pythonhosted.org/packages/82/6f/a605d300967d068c6b001a491b8917e3cb8752fa36f557294bb437bac69c/pysimmmulator-0.4.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-28 15:53:54",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pysimmmulator"
}