{"id":49097490,"url":"https://github.com/athammad/argenta","last_synced_at":"2026-04-20T21:38:23.287Z","repository":{"id":349050801,"uuid":"1200871674","full_name":"athammad/argenta","owner":"athammad","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-04T00:37:25.000Z","size":97,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-04T01:22:26.126Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/athammad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-03T23:34:25.000Z","updated_at":"2026-04-04T00:37:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/athammad/argenta","commit_stats":null,"previous_names":["athammad/argenta"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/athammad/argenta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/athammad%2Fargenta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/athammad%2Fargenta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/athammad%2Fargenta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/athammad%2Fargenta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/athammad","download_url":"https://codeload.github.com/athammad/argenta/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/athammad%2Fargenta/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067622,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-20T21:38:22.537Z","updated_at":"2026-04-20T21:38:23.278Z","avatar_url":"https://github.com/athammad.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" alt=\"Argenta\" width=\"420\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/argenta/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/argenta?color=blue\u0026style=flat-square\" alt=\"PyPI version\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/argenta/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/pyversions/argenta?style=flat-square\" alt=\"Python\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/athammad/argenta/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/athammad/argenta/ci.yml?branch=master\u0026label=CI\u0026style=flat-square\" alt=\"CI\"/\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-green?style=flat-square\" alt=\"License\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/astral-sh/ruff\"\u003e\u003cimg src=\"https://img.shields.io/badge/code%20style-ruff-orange?style=flat-square\" alt=\"Code style: ruff\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**Warehouse-native causal ML for experimentation.**\n\nMost A/B testing tools answer one question: *Did the experiment work?*\n\nArgenta answers: *For **whom** did it work, **why**, and **what should you do next**?*\n\n---\n\n## What Argenta Is\n\nArgenta is an analytics layer that connects to your existing data warehouse, runs a SQL pipeline\ninside it to construct an experiment dataset, and then applies causal ML methods to produce\nresults your current tool doesn't: heterogeneous treatment effects (HTE), per-user CATE scores,\nautomatic subgroup discovery, and targeted rollout recommendations.\n\nIt works with experiments you've already run — using whatever tool assigned variants (Statsig,\nLaunchDarkly, Optimizely, homegrown feature flags). Argenta only analyzes.\n\n## What Argenta Is NOT\n\n- **Not an A/B testing platform.** Argenta does not assign variants or run feature flags.\n- **Not a real-time system.** Analysis runs post-hoc, after experiments have collected data.\n- **Not a data pipeline tool.** Argenta does not move or replicate your data. SQL runs inside\n  your warehouse; results are written back to a schema you control.\n\n---\n\n## Quick Start\n\n### 1. Install\n\n```bash\n# Pick your warehouse:\npip install \"argenta[snowflake]\"\npip install \"argenta[bigquery]\"\npip install \"argenta[redshift]\"\npip install \"argenta[all]\"   # all warehouses\n```\n\n### 2. Create a config file\n\n```yaml\n# argenta.yaml\nwarehouse:\n  warehouse_type: snowflake\n  output_schema: argenta\n  credentials:\n    account: my_account\n    user: argenta_svc\n    password: \"${SNOWFLAKE_PASSWORD}\"\n    database: ANALYTICS\n    schema: PUBLIC\n    warehouse: COMPUTE_WH\n\nexposures:\n  table: ANALYTICS.PUBLIC.STATSIG_EXPOSURES\n  user_id_col: user_id\n  experiment_id_col: experiment_name\n  variant_col: group\n  timestamp_col: exposure_time\n\noutcomes:\n  table: ANALYTICS.PUBLIC.EVENTS\n  user_id_col: user_id\n  event_name_col: event_type\n  value_col: revenue\n  timestamp_col: event_time\n  target_events:\n    - purchase\n    - add_to_cart\n\nuser_features:\n  table: ANALYTICS.PUBLIC.USER_DIM\n  user_id_col: user_id\n  feature_cols:\n    - country\n    - device_type\n    - account_age_days\n  covariate_col: pre_experiment_revenue\n\nexperiment:\n  experiment_id: checkout_redesign_2024\n  control_variant: control\n  treatment_variant: treatment\n  alpha: 0.05\n  winsorize_percentile: 0.99\n  use_cuped: true\n```\n\n### 3. Run\n\n```python\nfrom argenta import ArgentoConfig, PipelineRunner\nfrom argenta.config.loader import load_config\n\nconfig = load_config(\"argenta.yaml\")\nrunner = PipelineRunner(config)\nresult = runner.run(\"checkout_redesign_2024\")\n\nprint(result)\n```\n\nResults are also written back to your warehouse at `argenta.experiment_results`.\n\n---\n\n## Architecture\n\n```\nYour warehouse (Snowflake / BigQuery / Redshift)\n         │\n         │  read-only + write to argenta schema\n         ▼\nArgenta SQL pipeline (runs INSIDE your warehouse)\n  ├── 1. Exposure deduplication   — first exposure per user wins\n  ├── 2. Outcome join             — only events after first exposure\n  └── 3. User feature join        — covariates for CUPED + future CATE\n         │\n         ▼\nArgenta stats layer (Python)\n  ├── ATE + Welch CI + p-value\n  ├── Winsorization\n  ├── SRM detection\n  └── CUPED variance reduction\n         │\n         ▼\nResults written back to your warehouse\n  ├── argenta.experiment_results   — per-metric ATE, CI, p-value\n  ├── argenta.user_cate_scores     — per-user CATE (Phase 2)\n  └── argenta.segment_effects      — HTE by segment (Phase 2)\n```\n\n---\n\n## Statistical Methods\n\n| Method | Purpose |\n|---|---|\n| Welch's t-test | ATE + p-value |\n| Confidence intervals | 95% CI on ATE |\n| Winsorization | Outlier handling for revenue metrics |\n| SRM detection | Sample ratio mismatch check |\n| CUPED | Variance reduction via pre-experiment covariate |\n| Causal Forest (CausalForestDML) | Non-parametric CATE estimation |\n| X-Learner | CATE with unbalanced treatment/control |\n| Uplift modeling | Score users not in experiment |\n| Sequential testing (mSPRT) | Always-valid p-values |\n| Multiple testing correction | Bonferroni / BH-FDR across metrics |\n\n---\n\n## Input Tables Required\n\nArgenta needs three tables in your warehouse (all column names are configurable):\n\n| Table | Required columns |\n|---|---|\n| Exposures | `user_id`, `experiment_id`, `variant`, `timestamp` |\n| Outcomes / events | `user_id`, `event_name`, `value`, `timestamp` |\n| User features | `user_id`, + any feature columns |\n\nThe user features table is required for CUPED variance reduction. Without it, set `use_cuped: false`.\n\n---\n\n## Output Tables\n\nArgenta writes results back to `{output_schema}` in your warehouse (default: `argenta`):\n\n| Table | Contents |\n|---|---|\n| `argenta.experiment_results` | ATE, CI, p-value, SRM flag per metric |\n| `argenta.user_cate_scores` | Per-user CATE score |\n| `argenta.segment_effects` | HTE by segment |\n\n---\n\n## Supported Warehouses\n\n| Warehouse | Extra | Status |\n|---|---|---|\n| Snowflake | `argenta[snowflake]` | Supported |\n| BigQuery | `argenta[bigquery]` | Supported |\n| Redshift | `argenta[redshift]` | Supported |\n| Databricks | `argenta[databricks]` | Planned |\n\n---\n\n## Documentation\n\n- [Architecture](docs/architecture.md)\n- [Onboarding a new warehouse](docs/onboarding.md)\n- [SQL pipeline explained](docs/sql_pipeline.md)\n- [Statistics reference](docs/statistics.md)\n- [Contributing](CONTRIBUTING.md)\n\n---\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions,\ncoding conventions, and the PR process.\n\n---\n\n## License\n\nApache 2.0. See [LICENSE](LICENSE).\n\n---\n\n## Side note\n\nThe name \"Argenta\" is inspired by the name of a professor who introduced me to causal inference during my bachelor's degree.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fathammad%2Fargenta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fathammad%2Fargenta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fathammad%2Fargenta/lists"}