{
  "meta": {},
  "site": {
    "title": "LeadForge Lead Scoring v1 — Pre-Publication Review",
    "owner": "leadforge-dev",
    "visibility": "Pre-publication review mock — not yet live on Kaggle or Hugging Face",
    "reviewerHint": "Review the dataset card copy, metadata accuracy, file listings, column preview, and download behaviour across all three difficulty tiers. The Shmaggle tab mirrors the Kaggle page; the ShmuggingFace tab mirrors the Hugging Face page.  Flag anything that looks wrong before the real publish.",
    "primarySlug": "leadforge-lead-scoring-v1-intro",
    "meta": {}
  },
  "datasets": [
    {
      "slug": "leadforge-lead-scoring-v1-intro",
      "title": "LeadForge Lead Scoring v1 — Intro",
      "owner": "leadforge-dev",
      "subtitle": "Intro difficulty · 5,000 leads · ~43% conversion rate · LR AUC 0.671 (5-seed median)",
      "license": "MIT",
      "task": "tabular-classification",
      "language": "English",
      "updated": "2026-08-02",
      "downloads": "0",
      "likes": "0",
      "contactName": "leadforge-dev",
      "contactEmail": "",
      "rowCount": 5000,
      "kaggleUsability": "Mock-only",
      "kaggleMedals": "Mock-only",
      "meta": {},
      "mockOnly": {},
      "description": "",
      "descriptionHtml": "<h1>B2B Lead Scoring Dataset — Intro Tier</h1>\n<p><strong>This is a synthetic dataset</strong> for practicing B2B lead scoring. It was generated by\n<a href=\"https://github.com/leadforge-dev/leadforge\">leadforge</a>, an open-source Python framework\nfor producing realistic CRM/funnel training data. No real company, customer, or\ntransaction is represented.</p>\n<p><strong>What you are predicting:</strong> Each row is a sales lead at a fictional B2B SaaS company.\nThe task is binary classification:</p>\n<blockquote>\n<p><code>converted_within_90_days</code> — did this lead close as a paid deal within 90 days?</p>\n</blockquote>\n<p>Features capture the first 30 days of CRM activity per lead (email/call touches, product\nsessions, deal stage, account firmographics). The label is derived from simulated events —\nnever directly sampled — so there is genuine causal structure behind the signal.</p>\n<hr />\n<h2>This tier: intro</h2>\n<table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Conversion rate</td>\n<td>~43%</td>\n</tr>\n<tr>\n<td>Signal strength</td>\n<td>0.90 / 1.0 (high)</td>\n</tr>\n<tr>\n<td>Noise level</td>\n<td>0.10 / 1.0 (low)</td>\n</tr>\n<tr>\n<td>Missing values</td>\n<td>~2%</td>\n</tr>\n<tr>\n<td>LR AUC (test, 5-seed median)</td>\n<td>0.671</td>\n</tr>\n<tr>\n<td>GBM AUC (test, 5-seed median)</td>\n<td>0.684</td>\n</tr>\n<tr>\n<td>Average precision (LR)</td>\n<td>0.555</td>\n</tr>\n<tr>\n<td>Precision @100</td>\n<td>0.60</td>\n</tr>\n</tbody>\n</table>\n<p>The <strong>intro tier is the easiest version of this task.</strong> Signal is strong, conversion rate\nis high (~43% of leads convert), and missing values are minimal. A simple logistic\nregression is competitive. Use this tier to prototype your pipeline and sanity-check your\napproach before scaling up difficulty.</p>\n<p>This dataset ships in three tiers — <strong>intro → intermediate → advanced</strong> — with decreasing\nsignal, lower conversion rates, and heavier noise and missingness. All three tiers share\nthe same schema and simulate the same fictional B2B world.</p>\n<hr />\n<h2>Table inventory</h2>\n<table>\n<thead>\n<tr>\n<th>Table</th>\n<th style=\"text-align:right\">Rows</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>accounts</td>\n<td style=\"text-align:right\">1,500</td>\n<td>One row per company</td>\n</tr>\n<tr>\n<td>contacts</td>\n<td style=\"text-align:right\">4,200</td>\n<td>One row per buyer-side individual (multiple per account)</td>\n</tr>\n<tr>\n<td>leads</td>\n<td style=\"text-align:right\">5,000</td>\n<td>One row per lead — the prediction unit</td>\n</tr>\n<tr>\n<td>touches</td>\n<td style=\"text-align:right\">38,561</td>\n<td>Marketing / SDR outreach events (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>sessions</td>\n<td style=\"text-align:right\">10,171</td>\n<td>Product demo or trial sessions (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>sales_activities</td>\n<td style=\"text-align:right\">21,358</td>\n<td>CRM activities: calls, emails, meetings (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>opportunities</td>\n<td style=\"text-align:right\">4,426</td>\n<td>Deal records opened before the 30-day snapshot</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Snapshot-safe:</strong> event tables contain only rows with timestamps ≤ 30 days from lead\ncreation. Outcome columns (<code>converted_within_90_days</code>, <code>conversion_timestamp</code>,\n<code>close_outcome</code>) are excluded from the public relational tables — they appear only in the\ntask splits.</p>\n<hr />\n<h2>Features</h2>\n<table>\n<thead>\n<tr>\n<th>Category</th>\n<th style=\"text-align:right\">Columns</th>\n<th>Examples</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Account</td>\n<td style=\"text-align:right\">6</td>\n<td><code>account_id</code>, <code>industry</code>, <code>region</code></td>\n</tr>\n<tr>\n<td>Contact</td>\n<td style=\"text-align:right\">4</td>\n<td><code>contact_id</code>, <code>role_function</code>, <code>seniority</code></td>\n</tr>\n<tr>\n<td>Lead metadata</td>\n<td style=\"text-align:right\">3</td>\n<td><code>lead_id</code>, <code>lead_created_at</code>, <code>lead_source</code></td>\n</tr>\n<tr>\n<td>Engagement</td>\n<td style=\"text-align:right\">11</td>\n<td><code>touch_count</code>, <code>inbound_touch_count</code>, <code>outbound_touch_count</code></td>\n</tr>\n<tr>\n<td>Sales</td>\n<td style=\"text-align:right\">6</td>\n<td><code>activity_count</code>, <code>days_since_last_touch</code>, <code>opportunity_created</code></td>\n</tr>\n<tr>\n<td>Target</td>\n<td style=\"text-align:right\">1</td>\n<td><code>converted_within_90_days</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>⚠ Intentional leakage trap:</strong> <code>total_touches_all</code> aggregates touches over the full\n90-day window (not just the 30-day feature window) and is deliberately retained as a\nleakage-detection teaching exercise. It is flagged <code>leakage_risk=True</code> in\n<code>feature_dictionary.csv</code>. Drop it from your feature set unless you are studying leakage.</p>\n<p>See <code>feature_dictionary.csv</code> for the full column-by-column specification.</p>\n<hr />\n<h2>The simulated world</h2>\n<p>The dataset simulates a fictional company — <strong>Veridian Technologies</strong> — a Series B\nstartup (Austin, TX, founded 2017) selling <strong>Veridian Procure</strong>, a cloud\nprocurement / AP automation SaaS. Everything below is invented:</p>\n<ul>\n<li><strong>Target customers:</strong> 200–2,000-employee firms in the US and UK (manufacturing,\nlogistics, healthcare, professional services)</li>\n<li><strong>Deal range:</strong> $18,000–$120,000 ACV; average deal $42,000; average sales cycle 45 days</li>\n<li><strong>Go-to-market:</strong> 45% inbound marketing, 35% SDR outbound, 20% partner referrals</li>\n<li><strong>Buyer personas:</strong> VP Finance (economic buyer), AP Manager (champion), IT Director\n(technical evaluator), Procurement Manager (end user)</li>\n</ul>\n<p>In this public version, the hidden causal graph, latent trait scores, and mechanism\nparameters are withheld. The instructor companion bundle includes them.</p>\n<hr />\n<h2>How to load</h2>\n<pre><code class=\"language-python\">import pandas as pd\n\n# Flat CSV — all leads, all splits combined (convenient for exploration)\ndf = pd.read_csv(&quot;lead_scoring.csv&quot;)\nX = df.drop(columns=[&quot;converted_within_90_days&quot;])\ny = df[&quot;converted_within_90_days&quot;]\n\n# Parquet task splits — recommended for model training\ntrain = pd.read_parquet(&quot;tasks/converted_within_90_days/train.parquet&quot;)\nvalid = pd.read_parquet(&quot;tasks/converted_within_90_days/valid.parquet&quot;)\ntest  = pd.read_parquet(&quot;tasks/converted_within_90_days/test.parquet&quot;)\n\n# Relational tables — for feature engineering\nleads   = pd.read_parquet(&quot;tables/leads.parquet&quot;)\ntouches = pd.read_parquet(&quot;tables/touches.parquet&quot;)\n</code></pre>\n<p>Splits are 70 / 15 / 15 (train / valid / test), stratified on the target, deterministic\ngiven seed 42.</p>\n<p><strong>Note on account overlap:</strong> ~93% of test-set accounts also appear in the training set\n(splits are keyed on <code>lead_id</code>). Headline AUC overstates generalisation to <em>unseen</em>\naccounts. For a faithful out-of-sample estimate, use\n<code>GroupKFold(groups=df[&quot;account_id&quot;])</code>.</p>\n<hr />\n<h2>Reproducibility</h2>\n<p>Generated with <strong>leadforge v1.0.0</strong>, recipe <code>b2b_saas_procurement_v1</code>, seed 42,\ndifficulty <code>intro</code>. To reproduce:</p>\n<pre><code class=\"language-bash\">pip install leadforge\nleadforge generate --recipe b2b_saas_procurement_v1 --seed 42 \\\n                   --mode student_public --difficulty intro --out my_bundle\n</code></pre>\n<p>Every file in this bundle is SHA-256 hashed in <code>manifest.json</code>. Run\n<code>leadforge validate my_bundle</code> to verify integrity.</p>\n<p><strong>Author:</strong> <a href=\"https://huggingface.co/shaypal5\">Shay Palachy Affek</a> · <a href=\"https://www.kaggle.com/derelictpanda\">Kaggle</a> · <a href=\"https://github.com/shaypalachy\">GitHub</a></p>\n<hr />\n<h2>Caveats</h2>\n<ul>\n<li><strong>Synthetic data only.</strong> No real company, customer, or market is represented.</li>\n<li><strong>AUC does not distinguish tiers.</strong> LR AUC is ~0.67 across all three tiers by design.\nThe tiers differ in conversion rate (43% / 22% / 8%), noise, and missing values — not\nin rank discrimination. Use average precision, P@K, and calibration metrics to see the\ndifficulty gradient.</li>\n<li><strong>~93% train/test account overlap.</strong> Splits are keyed on <code>lead_id</code>; most test accounts\nalso appear in train. Headline metrics overstate generalisation to unseen accounts.</li>\n<li><strong>Snapshot window.</strong> Engagement features cover days 0–30 per lead; the label resolves\nat day 90. <code>total_touches_all</code> is the intentional exception — it aggregates over the\nfull 90-day window and is a leakage trap.</li>\n<li><strong>Public version.</strong> The hidden causal graph, latent trait scores, and mechanism\nparameters are withheld. The instructor companion bundle includes them.</li>\n</ul>\n",
      "tags": [
        "tabular",
        "lead-scoring",
        "synthetic-data",
        "crm",
        "b2b",
        "datasets",
        "pandas",
        "intro"
      ],
      "coverImage": "../dataset-cover-image.png",
      "splits": [
        "train",
        "valid",
        "test"
      ],
      "subsets": [
        "leadforge-lead-scoring-v1-intro"
      ],
      "splitRowCounts": {},
      "files": [
        {
          "path": "lead_scoring.csv",
          "size": "1357 KB",
          "kind": "CSV",
          "sourcePath": "../intro/lead_scoring.csv",
          "about": "Flat ML-ready snapshot CSV: 5,000 leads × 32 columns (including 'split'), snapshot day 30.  The 'split' column (train / valid / test) lets conventional ML workflows load a single file.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "feature_dictionary.csv",
          "size": "3 KB",
          "kind": "CSV",
          "sourcePath": "../intro/feature_dictionary.csv",
          "about": "Per-column documentation: dtype, analytical category, leakage-risk flag, and plain-language description.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/train.parquet",
          "size": "230 KB",
          "kind": "Parquet",
          "sourcePath": "../intro/tasks/converted_within_90_days/train.parquet",
          "about": "Training split — 3,500 leads, stratified by conversion rate.  Target column: `converted_within_90_days` (bool).",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/valid.parquet",
          "size": "68 KB",
          "kind": "Parquet",
          "sourcePath": "../intro/tasks/converted_within_90_days/valid.parquet",
          "about": "Validation split — 750 leads.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/test.parquet",
          "size": "68 KB",
          "kind": "Parquet",
          "sourcePath": "../intro/tasks/converted_within_90_days/test.parquet",
          "about": "Test split — 750 leads, held out for final evaluation only.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "dataset_card.md",
          "size": "6 KB",
          "kind": "Dataset card",
          "sourcePath": "../intro/dataset_card.md",
          "about": "Auto-generated tier-specific dataset card.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        }
      ],
      "artifactGroups": [],
      "columns": [
        "split",
        "account_id",
        "industry",
        "region",
        "employee_band",
        "estimated_revenue_band",
        "process_maturity_band",
        "contact_id",
        "role_function",
        "seniority",
        "buyer_role",
        "lead_id",
        "lead_created_at",
        "lead_source",
        "touch_count",
        "inbound_touch_count",
        "outbound_touch_count",
        "session_count",
        "pricing_page_views",
        "demo_page_views",
        "total_session_duration_seconds",
        "touches_days_0_7",
        "touches_last_7_days",
        "days_since_first_touch",
        "activity_count",
        "days_since_last_touch",
        "opportunity_created",
        "has_open_opportunity",
        "opportunity_estimated_acv",
        "expected_acv",
        "total_touches_all",
        "converted_within_90_days"
      ],
      "rows": [
        {
          "split": "train",
          "account_id": "acct_000773",
          "industry": "logistics",
          "region": "UK",
          "employee_band": "200-499",
          "estimated_revenue_band": "$50M-$200M",
          "process_maturity_band": "low",
          "contact_id": "cnt_001124",
          "role_function": "procurement_manager",
          "seniority": "vp",
          "buyer_role": "end_user",
          "lead_id": "lead_004250",
          "lead_created_at": "2024-01-08",
          "lead_source": "inbound_marketing",
          "touch_count": "9.0",
          "inbound_touch_count": "9.0",
          "outbound_touch_count": "0.0",
          "session_count": "3.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "796.0",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "2.0",
          "days_since_first_touch": "28.01572217905263",
          "activity_count": "6.0",
          "days_since_last_touch": "4.035906451086055",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "27780.912782268333",
          "expected_acv": "18677.34637448744",
          "total_touches_all": "12",
          "converted_within_90_days": "True"
        },
        {
          "split": "train",
          "account_id": "acct_000043",
          "industry": "logistics",
          "region": "UK",
          "employee_band": "500-999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "high",
          "contact_id": "cnt_003354",
          "role_function": "it_director",
          "seniority": "c_suite",
          "buyer_role": "technical_evaluator",
          "lead_id": "lead_001565",
          "lead_created_at": "2024-01-01",
          "lead_source": "inbound_marketing",
          "touch_count": "7.0",
          "inbound_touch_count": "7.0",
          "outbound_touch_count": "0.0",
          "session_count": "1.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "536.0",
          "touches_days_0_7": "3.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "30.114696019867328",
          "activity_count": "4.0",
          "days_since_last_touch": "6.327765693401558",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "60684.99461766471",
          "expected_acv": "65794.82084652115",
          "total_touches_all": "10",
          "converted_within_90_days": "True"
        },
        {
          "split": "train",
          "account_id": "acct_000319",
          "industry": "logistics",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$1M-$10M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_000537",
          "role_function": "ap_manager",
          "seniority": "director",
          "buyer_role": "champion",
          "lead_id": "lead_002296",
          "lead_created_at": "2024-01-05",
          "lead_source": "partner_referral",
          "touch_count": "13.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "13.0",
          "session_count": "5.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "1286.0",
          "touches_days_0_7": "5.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "28.64502758561542",
          "activity_count": "4.0",
          "days_since_last_touch": "2.5589920790762024",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "45139.93897240506",
          "expected_acv": "44352.635946813425",
          "total_touches_all": "13",
          "converted_within_90_days": "True"
        },
        {
          "split": "train",
          "account_id": "acct_000476",
          "industry": "healthcare_non_clinical",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_001478",
          "role_function": "ap_manager",
          "seniority": "director",
          "buyer_role": "champion",
          "lead_id": "lead_003320",
          "lead_created_at": "2024-01-29",
          "lead_source": "inbound_marketing",
          "touch_count": "6.0",
          "inbound_touch_count": "6.0",
          "outbound_touch_count": "0.0",
          "session_count": "0.0",
          "pricing_page_views": "",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "0.0",
          "touches_days_0_7": "2.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "27.74771018638961",
          "activity_count": "4.0",
          "days_since_last_touch": "0.0",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "14915.368800612216",
          "expected_acv": "12893.722694470003",
          "total_touches_all": "13",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000243",
          "industry": "manufacturing",
          "region": "US",
          "employee_band": "1000-1999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "low",
          "contact_id": "cnt_000276",
          "role_function": "vp_finance",
          "seniority": "individual_contributor",
          "buyer_role": "economic_buyer",
          "lead_id": "lead_001192",
          "lead_created_at": "2024-01-01",
          "lead_source": "sdr_outbound",
          "touch_count": "8.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "8.0",
          "session_count": "0.0",
          "pricing_page_views": "",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "0.0",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "30.418251976326776",
          "activity_count": "2.0",
          "days_since_last_touch": "",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "91636.39345652371",
          "expected_acv": "89072.2900055219",
          "total_touches_all": "10",
          "converted_within_90_days": "True"
        },
        {
          "split": "train",
          "account_id": "acct_000353",
          "industry": "manufacturing",
          "region": "UK",
          "employee_band": "2000+",
          "estimated_revenue_band": "$1M-$10M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_002665",
          "role_function": "procurement_manager",
          "seniority": "vp",
          "buyer_role": "end_user",
          "lead_id": "lead_000123",
          "lead_created_at": "2024-01-27",
          "lead_source": "sdr_outbound",
          "touch_count": "6.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "6.0",
          "session_count": "2.0",
          "pricing_page_views": "2.0",
          "demo_page_views": "1.0",
          "total_session_duration_seconds": "586.0",
          "touches_days_0_7": "2.0",
          "touches_last_7_days": "2.0",
          "days_since_first_touch": "24.856867775705567",
          "activity_count": "4.0",
          "days_since_last_touch": "1.1956549420122882",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "124595.56256099977",
          "expected_acv": "118802.812015783",
          "total_touches_all": "7",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000029",
          "industry": "healthcare_non_clinical",
          "region": "US",
          "employee_band": "500-999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "low",
          "contact_id": "cnt_001377",
          "role_function": "procurement_manager",
          "seniority": "individual_contributor",
          "buyer_role": "end_user",
          "lead_id": "lead_001076",
          "lead_created_at": "2024-01-18",
          "lead_source": "sdr_outbound",
          "touch_count": "9.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "9.0",
          "session_count": "4.0",
          "pricing_page_views": "2.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "1160.0",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "30.03620847580526",
          "activity_count": "3.0",
          "days_since_last_touch": "5.959612069636063",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "71376.55819128227",
          "expected_acv": "79837.85735226946",
          "total_touches_all": "14",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_001411",
          "industry": "professional_services",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "high",
          "contact_id": "cnt_002913",
          "role_function": "vp_finance",
          "seniority": "c_suite",
          "buyer_role": "economic_buyer",
          "lead_id": "lead_001584",
          "lead_created_at": "2024-01-09",
          "lead_source": "sdr_outbound",
          "touch_count": "3.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "3.0",
          "session_count": "1.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "234.0",
          "touches_days_0_7": "3.0",
          "touches_last_7_days": "0.0",
          "days_since_first_touch": "29.66950619411096",
          "activity_count": "0.0",
          "days_since_last_touch": "27.56128502749063",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "46471.80355527434",
          "total_touches_all": "3",
          "converted_within_90_days": "False"
        }
      ],
      "profileStats": null,
      "huggingFaceValidation": {},
      "discussions": [
        "What is `snapshot_day = 30` and how does it affect which features are valid at inference time?",
        "Is `total_touches_all` a safe feature or a time-window leakage trap?",
        "LR and GBM AUCs are very close across tiers — does relational feature engineering help?",
        "How would you set a probability threshold for a team that can only work 50 leads per week?",
        "What happens to AUC when you evaluate on a chronological hold-out instead of a random split?"
      ]
    },
    {
      "slug": "leadforge-lead-scoring-v1-intermediate",
      "title": "LeadForge Lead Scoring v1 — Intermediate",
      "owner": "leadforge-dev",
      "subtitle": "Intermediate difficulty · 5,000 leads · ~22% conversion rate · LR AUC 0.662 (5-seed median)",
      "license": "MIT",
      "task": "tabular-classification",
      "language": "English",
      "updated": "2026-08-02",
      "downloads": "0",
      "likes": "0",
      "contactName": "leadforge-dev",
      "contactEmail": "",
      "rowCount": 5000,
      "kaggleUsability": "Mock-only",
      "kaggleMedals": "Mock-only",
      "meta": {},
      "mockOnly": {},
      "description": "",
      "descriptionHtml": "<h1>B2B Lead Scoring Dataset — Intermediate Tier</h1>\n<p><strong>This is a synthetic dataset</strong> for practicing B2B lead scoring. It was generated by\n<a href=\"https://github.com/leadforge-dev/leadforge\">leadforge</a>, an open-source Python framework\nfor producing realistic CRM/funnel training data. No real company, customer, or\ntransaction is represented.</p>\n<p><strong>What you are predicting:</strong> Each row is a sales lead at a fictional B2B SaaS company.\nThe task is binary classification:</p>\n<blockquote>\n<p><code>converted_within_90_days</code> — did this lead close as a paid deal within 90 days?</p>\n</blockquote>\n<p>Features capture the first 30 days of CRM activity per lead (email/call touches, product\nsessions, deal stage, account firmographics). The label is derived from simulated events —\nnever directly sampled — so there is genuine causal structure behind the signal.</p>\n<hr />\n<h2>This tier: intermediate</h2>\n<table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Conversion rate</td>\n<td>~22%</td>\n</tr>\n<tr>\n<td>Signal strength</td>\n<td>0.70 / 1.0 (medium)</td>\n</tr>\n<tr>\n<td>Noise level</td>\n<td>0.30 / 1.0 (moderate)</td>\n</tr>\n<tr>\n<td>Missing values</td>\n<td>~8%</td>\n</tr>\n<tr>\n<td>LR AUC (test, 5-seed median)</td>\n<td>0.662</td>\n</tr>\n<tr>\n<td>GBM AUC (test, 5-seed median)</td>\n<td>0.634</td>\n</tr>\n<tr>\n<td>Average precision (LR)</td>\n<td>0.332</td>\n</tr>\n<tr>\n<td>Precision @100</td>\n<td>0.33</td>\n</tr>\n</tbody>\n</table>\n<p>The <strong>intermediate tier is the default benchmark.</strong> Conversion rate is ~22% — more\nrealistic for B2B SaaS than the intro tier — and noise is moderate enough that simple\nfeature engineering starts to matter. GBM does not consistently beat logistic regression\nhere (the snapshot is dominated by near-linear features); that gap is worth investigating.\nCalibration becomes important at this prevalence — a model that predicts the right rank\norder can still be badly miscalibrated.</p>\n<p>This dataset ships in three tiers — <strong>intro → intermediate → advanced</strong> — with decreasing\nsignal, lower conversion rates, and heavier noise and missingness. All three tiers share\nthe same schema and simulate the same fictional B2B world.</p>\n<hr />\n<h2>Table inventory</h2>\n<table>\n<thead>\n<tr>\n<th>Table</th>\n<th style=\"text-align:right\">Rows</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>accounts</td>\n<td style=\"text-align:right\">1,500</td>\n<td>One row per company</td>\n</tr>\n<tr>\n<td>contacts</td>\n<td style=\"text-align:right\">4,200</td>\n<td>One row per buyer-side individual (multiple per account)</td>\n</tr>\n<tr>\n<td>leads</td>\n<td style=\"text-align:right\">5,000</td>\n<td>One row per lead — the prediction unit</td>\n</tr>\n<tr>\n<td>touches</td>\n<td style=\"text-align:right\">38,724</td>\n<td>Marketing / SDR outreach events (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>sessions</td>\n<td style=\"text-align:right\">10,012</td>\n<td>Product demo or trial sessions (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>sales_activities</td>\n<td style=\"text-align:right\">20,679</td>\n<td>CRM activities: calls, emails, meetings (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>opportunities</td>\n<td style=\"text-align:right\">4,255</td>\n<td>Deal records opened before the 30-day snapshot</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Snapshot-safe:</strong> event tables contain only rows with timestamps ≤ 30 days from lead\ncreation. Outcome columns (<code>converted_within_90_days</code>, <code>conversion_timestamp</code>,\n<code>close_outcome</code>) are excluded from the public relational tables — they appear only in the\ntask splits.</p>\n<hr />\n<h2>Features</h2>\n<table>\n<thead>\n<tr>\n<th>Category</th>\n<th style=\"text-align:right\">Columns</th>\n<th>Examples</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Account</td>\n<td style=\"text-align:right\">6</td>\n<td><code>account_id</code>, <code>industry</code>, <code>region</code></td>\n</tr>\n<tr>\n<td>Contact</td>\n<td style=\"text-align:right\">4</td>\n<td><code>contact_id</code>, <code>role_function</code>, <code>seniority</code></td>\n</tr>\n<tr>\n<td>Lead metadata</td>\n<td style=\"text-align:right\">3</td>\n<td><code>lead_id</code>, <code>lead_created_at</code>, <code>lead_source</code></td>\n</tr>\n<tr>\n<td>Engagement</td>\n<td style=\"text-align:right\">11</td>\n<td><code>touch_count</code>, <code>inbound_touch_count</code>, <code>outbound_touch_count</code></td>\n</tr>\n<tr>\n<td>Sales</td>\n<td style=\"text-align:right\">6</td>\n<td><code>activity_count</code>, <code>days_since_last_touch</code>, <code>opportunity_created</code></td>\n</tr>\n<tr>\n<td>Target</td>\n<td style=\"text-align:right\">1</td>\n<td><code>converted_within_90_days</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>⚠ Intentional leakage trap:</strong> <code>total_touches_all</code> aggregates touches over the full\n90-day window (not just the 30-day feature window) and is deliberately retained as a\nleakage-detection teaching exercise. It is flagged <code>leakage_risk=True</code> in\n<code>feature_dictionary.csv</code>. Drop it from your feature set unless you are studying leakage.</p>\n<p>See <code>feature_dictionary.csv</code> for the full column-by-column specification.</p>\n<hr />\n<h2>The simulated world</h2>\n<p>The dataset simulates a fictional company — <strong>Veridian Technologies</strong> — a Series B\nstartup (Austin, TX, founded 2017) selling <strong>Veridian Procure</strong>, a cloud\nprocurement / AP automation SaaS. Everything below is invented:</p>\n<ul>\n<li><strong>Target customers:</strong> 200–2,000-employee firms in the US and UK (manufacturing,\nlogistics, healthcare, professional services)</li>\n<li><strong>Deal range:</strong> $18,000–$120,000 ACV; average deal $42,000; average sales cycle 45 days</li>\n<li><strong>Go-to-market:</strong> 45% inbound marketing, 35% SDR outbound, 20% partner referrals</li>\n<li><strong>Buyer personas:</strong> VP Finance (economic buyer), AP Manager (champion), IT Director\n(technical evaluator), Procurement Manager (end user)</li>\n</ul>\n<p>In this public version, the hidden causal graph, latent trait scores, and mechanism\nparameters are withheld. The instructor companion bundle includes them.</p>\n<hr />\n<h2>How to load</h2>\n<pre><code class=\"language-python\">import pandas as pd\n\n# Flat CSV — all leads, all splits combined (convenient for exploration)\ndf = pd.read_csv(&quot;lead_scoring.csv&quot;)\nX = df.drop(columns=[&quot;converted_within_90_days&quot;])\ny = df[&quot;converted_within_90_days&quot;]\n\n# Parquet task splits — recommended for model training\ntrain = pd.read_parquet(&quot;tasks/converted_within_90_days/train.parquet&quot;)\nvalid = pd.read_parquet(&quot;tasks/converted_within_90_days/valid.parquet&quot;)\ntest  = pd.read_parquet(&quot;tasks/converted_within_90_days/test.parquet&quot;)\n\n# Relational tables — for feature engineering\nleads   = pd.read_parquet(&quot;tables/leads.parquet&quot;)\ntouches = pd.read_parquet(&quot;tables/touches.parquet&quot;)\n</code></pre>\n<p>Splits are 70 / 15 / 15 (train / valid / test), stratified on the target, deterministic\ngiven seed 42.</p>\n<p><strong>Note on account overlap:</strong> ~93% of test-set accounts also appear in the training set\n(splits are keyed on <code>lead_id</code>). Headline AUC overstates generalisation to <em>unseen</em>\naccounts. For a faithful out-of-sample estimate, use\n<code>GroupKFold(groups=df[&quot;account_id&quot;])</code>.</p>\n<hr />\n<h2>Reproducibility</h2>\n<p>Generated with <strong>leadforge v1.0.0</strong>, recipe <code>b2b_saas_procurement_v1</code>, seed 42,\ndifficulty <code>intermediate</code>. To reproduce:</p>\n<pre><code class=\"language-bash\">pip install leadforge\nleadforge generate --recipe b2b_saas_procurement_v1 --seed 42 \\\n                   --mode student_public --difficulty intermediate --out my_bundle\n</code></pre>\n<p>Every file in this bundle is SHA-256 hashed in <code>manifest.json</code>. Run\n<code>leadforge validate my_bundle</code> to verify integrity.</p>\n<p><strong>Author:</strong> <a href=\"https://huggingface.co/shaypal5\">Shay Palachy Affek</a> · <a href=\"https://www.kaggle.com/derelictpanda\">Kaggle</a> · <a href=\"https://github.com/shaypalachy\">GitHub</a></p>\n<hr />\n<h2>Caveats</h2>\n<ul>\n<li><strong>Synthetic data only.</strong> No real company, customer, or market is represented.</li>\n<li><strong>AUC does not distinguish tiers.</strong> LR AUC is ~0.66 across all three tiers by design.\nThe tiers differ in conversion rate (43% / 22% / 8%), noise, and missing values — not\nin rank discrimination. Use average precision, P@K, and calibration metrics to see the\ndifficulty gradient.</li>\n<li><strong>~93% train/test account overlap.</strong> Splits are keyed on <code>lead_id</code>; most test accounts\nalso appear in train. Headline metrics overstate generalisation to unseen accounts.</li>\n<li><strong>Snapshot window.</strong> Engagement features cover days 0–30 per lead; the label resolves\nat day 90. <code>total_touches_all</code> is the intentional exception — it aggregates over the\nfull 90-day window and is a leakage trap.</li>\n<li><strong>Public version.</strong> The hidden causal graph, latent trait scores, and mechanism\nparameters are withheld. The instructor companion bundle includes them.</li>\n</ul>\n",
      "tags": [
        "tabular",
        "lead-scoring",
        "synthetic-data",
        "crm",
        "b2b",
        "datasets",
        "pandas",
        "intermediate"
      ],
      "coverImage": "../dataset-cover-image.png",
      "splits": [
        "train",
        "valid",
        "test"
      ],
      "subsets": [
        "leadforge-lead-scoring-v1-intermediate"
      ],
      "splitRowCounts": {},
      "files": [
        {
          "path": "lead_scoring.csv",
          "size": "1323 KB",
          "kind": "CSV",
          "sourcePath": "../intermediate/lead_scoring.csv",
          "about": "Flat ML-ready snapshot CSV: 5,000 leads × 32 columns (including 'split'), snapshot day 30.  The 'split' column (train / valid / test) lets conventional ML workflows load a single file.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "feature_dictionary.csv",
          "size": "3 KB",
          "kind": "CSV",
          "sourcePath": "../intermediate/feature_dictionary.csv",
          "about": "Per-column documentation: dtype, analytical category, leakage-risk flag, and plain-language description.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/train.parquet",
          "size": "219 KB",
          "kind": "Parquet",
          "sourcePath": "../intermediate/tasks/converted_within_90_days/train.parquet",
          "about": "Training split — 3,500 leads, stratified by conversion rate.  Target column: `converted_within_90_days` (bool).",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/valid.parquet",
          "size": "65 KB",
          "kind": "Parquet",
          "sourcePath": "../intermediate/tasks/converted_within_90_days/valid.parquet",
          "about": "Validation split — 750 leads.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/test.parquet",
          "size": "65 KB",
          "kind": "Parquet",
          "sourcePath": "../intermediate/tasks/converted_within_90_days/test.parquet",
          "about": "Test split — 750 leads, held out for final evaluation only.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "dataset_card.md",
          "size": "6 KB",
          "kind": "Dataset card",
          "sourcePath": "../intermediate/dataset_card.md",
          "about": "Auto-generated tier-specific dataset card.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        }
      ],
      "artifactGroups": [],
      "columns": [
        "split",
        "account_id",
        "industry",
        "region",
        "employee_band",
        "estimated_revenue_band",
        "process_maturity_band",
        "contact_id",
        "role_function",
        "seniority",
        "buyer_role",
        "lead_id",
        "lead_created_at",
        "lead_source",
        "touch_count",
        "inbound_touch_count",
        "outbound_touch_count",
        "session_count",
        "pricing_page_views",
        "demo_page_views",
        "total_session_duration_seconds",
        "touches_days_0_7",
        "touches_last_7_days",
        "days_since_first_touch",
        "activity_count",
        "days_since_last_touch",
        "opportunity_created",
        "has_open_opportunity",
        "opportunity_estimated_acv",
        "expected_acv",
        "total_touches_all",
        "converted_within_90_days"
      ],
      "rows": [
        {
          "split": "train",
          "account_id": "acct_000773",
          "industry": "logistics",
          "region": "UK",
          "employee_band": "200-499",
          "estimated_revenue_band": "$50M-$200M",
          "process_maturity_band": "low",
          "contact_id": "cnt_001124",
          "role_function": "procurement_manager",
          "seniority": "vp",
          "buyer_role": "end_user",
          "lead_id": "lead_004250",
          "lead_created_at": "2024-01-08",
          "lead_source": "inbound_marketing",
          "touch_count": "0.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "0.0",
          "session_count": "0.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "0.0",
          "touches_days_0_7": "0.0",
          "touches_last_7_days": "0.0",
          "days_since_first_touch": "",
          "activity_count": "0.0",
          "days_since_last_touch": "",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "66699.05653659195",
          "total_touches_all": "0",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000043",
          "industry": "logistics",
          "region": "UK",
          "employee_band": "500-999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "high",
          "contact_id": "cnt_003354",
          "role_function": "it_director",
          "seniority": "c_suite",
          "buyer_role": "technical_evaluator",
          "lead_id": "lead_001565",
          "lead_created_at": "2024-01-01",
          "lead_source": "inbound_marketing",
          "touch_count": "5.0",
          "inbound_touch_count": "5.0",
          "outbound_touch_count": "0.0",
          "session_count": "2.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "632.0",
          "touches_days_0_7": "1.0",
          "touches_last_7_days": "0.0",
          "days_since_first_touch": "30.333835742092244",
          "activity_count": "0.0",
          "days_since_last_touch": "11.003359485085898",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "58372.35262983076",
          "total_touches_all": "9",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000319",
          "industry": "logistics",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$1M-$10M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_000537",
          "role_function": "ap_manager",
          "seniority": "director",
          "buyer_role": "champion",
          "lead_id": "lead_002296",
          "lead_created_at": "2024-01-05",
          "lead_source": "partner_referral",
          "touch_count": "9.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "9.0",
          "session_count": "3.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "900.0",
          "touches_days_0_7": "3.0",
          "touches_last_7_days": "2.0",
          "days_since_first_touch": "27.96681262771429",
          "activity_count": "2.0",
          "days_since_last_touch": "5.711191915200993",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "17756.716765584522",
          "expected_acv": "15462.350089440228",
          "total_touches_all": "17",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000476",
          "industry": "healthcare_non_clinical",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_001478",
          "role_function": "ap_manager",
          "seniority": "director",
          "buyer_role": "champion",
          "lead_id": "lead_003320",
          "lead_created_at": "2024-01-29",
          "lead_source": "inbound_marketing",
          "touch_count": "5.0",
          "inbound_touch_count": "5.0",
          "outbound_touch_count": "0.0",
          "session_count": "1.0",
          "pricing_page_views": "",
          "demo_page_views": "2.0",
          "total_session_duration_seconds": "435.0",
          "touches_days_0_7": "0.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "43.508329886600016",
          "activity_count": "2.0",
          "days_since_last_touch": "0.6712216272156128",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "36370.40103541685",
          "expected_acv": "30489.660790082788",
          "total_touches_all": "13",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000243",
          "industry": "manufacturing",
          "region": "US",
          "employee_band": "1000-1999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "low",
          "contact_id": "cnt_000276",
          "role_function": "vp_finance",
          "seniority": "individual_contributor",
          "buyer_role": "economic_buyer",
          "lead_id": "lead_001192",
          "lead_created_at": "2024-01-01",
          "lead_source": "sdr_outbound",
          "touch_count": "",
          "inbound_touch_count": "",
          "outbound_touch_count": "5.0",
          "session_count": "1.0",
          "pricing_page_views": "",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "171.0",
          "touches_days_0_7": "1.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "31.217369696525743",
          "activity_count": "5.0",
          "days_since_last_touch": "",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "50459.383816603025",
          "expected_acv": "42999.143947625904",
          "total_touches_all": "10",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000353",
          "industry": "manufacturing",
          "region": "UK",
          "employee_band": "2000+",
          "estimated_revenue_band": "$1M-$10M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_002665",
          "role_function": "procurement_manager",
          "seniority": "vp",
          "buyer_role": "end_user",
          "lead_id": "lead_000123",
          "lead_created_at": "2024-01-27",
          "lead_source": "sdr_outbound",
          "touch_count": "1.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "1.0",
          "session_count": "1.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "359.0",
          "touches_days_0_7": "1.0",
          "touches_last_7_days": "0.0",
          "days_since_first_touch": "27.58339746775941",
          "activity_count": "0.0",
          "days_since_last_touch": "28.598940785518547",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "24194.29230242279",
          "total_touches_all": "1",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000029",
          "industry": "healthcare_non_clinical",
          "region": "US",
          "employee_band": "500-999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "low",
          "contact_id": "cnt_001377",
          "role_function": "procurement_manager",
          "seniority": "individual_contributor",
          "buyer_role": "end_user",
          "lead_id": "lead_001076",
          "lead_created_at": "2024-01-18",
          "lead_source": "sdr_outbound",
          "touch_count": "10.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "10.0",
          "session_count": "4.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "765.0",
          "touches_days_0_7": "6.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "30.10538886531948",
          "activity_count": "5.0",
          "days_since_last_touch": "2.8763640801052426",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "66172.23795336873",
          "total_touches_all": "17",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_001411",
          "industry": "professional_services",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "high",
          "contact_id": "cnt_002913",
          "role_function": "vp_finance",
          "seniority": "c_suite",
          "buyer_role": "economic_buyer",
          "lead_id": "lead_001584",
          "lead_created_at": "2024-01-09",
          "lead_source": "sdr_outbound",
          "touch_count": "12.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "12.0",
          "session_count": "2.0",
          "pricing_page_views": "1.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "515.0",
          "touches_days_0_7": "5.0",
          "touches_last_7_days": "4.0",
          "days_since_first_touch": "29.038060387156584",
          "activity_count": "6.0",
          "days_since_last_touch": "3.718211110884809",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "242469.1078369078",
          "expected_acv": "21952.764727910577",
          "total_touches_all": "18",
          "converted_within_90_days": "False"
        }
      ],
      "profileStats": null,
      "huggingFaceValidation": {},
      "discussions": [
        "What is `snapshot_day = 30` and how does it affect which features are valid at inference time?",
        "Is `total_touches_all` a safe feature or a time-window leakage trap?",
        "LR and GBM AUCs are very close across tiers — does relational feature engineering help?",
        "How would you set a probability threshold for a team that can only work 50 leads per week?",
        "What happens to AUC when you evaluate on a chronological hold-out instead of a random split?"
      ]
    },
    {
      "slug": "leadforge-lead-scoring-v1-advanced",
      "title": "LeadForge Lead Scoring v1 — Advanced",
      "owner": "leadforge-dev",
      "subtitle": "Advanced difficulty · 5,000 leads · ~8% conversion rate · LR AUC 0.624 (5-seed median)",
      "license": "MIT",
      "task": "tabular-classification",
      "language": "English",
      "updated": "2026-08-02",
      "downloads": "0",
      "likes": "0",
      "contactName": "leadforge-dev",
      "contactEmail": "",
      "rowCount": 5000,
      "kaggleUsability": "Mock-only",
      "kaggleMedals": "Mock-only",
      "meta": {},
      "mockOnly": {},
      "description": "",
      "descriptionHtml": "<h1>B2B Lead Scoring Dataset — Advanced Tier</h1>\n<p><strong>This is a synthetic dataset</strong> for practicing B2B lead scoring. It was generated by\n<a href=\"https://github.com/leadforge-dev/leadforge\">leadforge</a>, an open-source Python framework\nfor producing realistic CRM/funnel training data. No real company, customer, or\ntransaction is represented.</p>\n<p><strong>What you are predicting:</strong> Each row is a sales lead at a fictional B2B SaaS company.\nThe task is binary classification:</p>\n<blockquote>\n<p><code>converted_within_90_days</code> — did this lead close as a paid deal within 90 days?</p>\n</blockquote>\n<p>Features capture the first 30 days of CRM activity per lead (email/call touches, product\nsessions, deal stage, account firmographics). The label is derived from simulated events —\nnever directly sampled — so there is genuine causal structure behind the signal.</p>\n<hr />\n<h2>This tier: advanced</h2>\n<table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Conversion rate</td>\n<td>~8%</td>\n</tr>\n<tr>\n<td>Signal strength</td>\n<td>0.50 / 1.0 (moderate)</td>\n</tr>\n<tr>\n<td>Noise level</td>\n<td>0.55 / 1.0 (high)</td>\n</tr>\n<tr>\n<td>Missing values</td>\n<td>~18%</td>\n</tr>\n<tr>\n<td>LR AUC (test, 5-seed median)</td>\n<td>0.624</td>\n</tr>\n<tr>\n<td>GBM AUC (test, 5-seed median)</td>\n<td>0.600</td>\n</tr>\n<tr>\n<td>Average precision (LR)</td>\n<td>0.122</td>\n</tr>\n<tr>\n<td>Precision @100</td>\n<td>0.11</td>\n</tr>\n</tbody>\n</table>\n<p>The <strong>advanced tier is a calibration and rare-event exercise.</strong> Conversion rate is ~8% —\na realistic low-prevalence regime for mid-market SaaS — and noise is heavy enough that\ncount features show artifact zeros (Gaussian noise clamped to zero; treat zero clusters as\ndata-cleaning material, not reliable signal). AUC barely moves across tiers by design;\nhere you'll want average precision, P@K, and value-weighted ranking\n(<code>expected_acv × P(convert)</code>) to measure what matters. Calibration is harder in this\ntier: a miscalibrated model can rank correctly but still predict systematically wrong\nprobabilities — the kind of mistake that breaks real-world decision thresholds.</p>\n<p>This dataset ships in three tiers — <strong>intro → intermediate → advanced</strong> — with decreasing\nsignal, lower conversion rates, and heavier noise and missingness. All three tiers share\nthe same schema and simulate the same fictional B2B world.</p>\n<hr />\n<h2>Table inventory</h2>\n<table>\n<thead>\n<tr>\n<th>Table</th>\n<th style=\"text-align:right\">Rows</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>accounts</td>\n<td style=\"text-align:right\">1,500</td>\n<td>One row per company</td>\n</tr>\n<tr>\n<td>contacts</td>\n<td style=\"text-align:right\">4,200</td>\n<td>One row per buyer-side individual (multiple per account)</td>\n</tr>\n<tr>\n<td>leads</td>\n<td style=\"text-align:right\">5,000</td>\n<td>One row per lead — the prediction unit</td>\n</tr>\n<tr>\n<td>touches</td>\n<td style=\"text-align:right\">38,208</td>\n<td>Marketing / SDR outreach events (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>sessions</td>\n<td style=\"text-align:right\">9,942</td>\n<td>Product demo or trial sessions (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>sales_activities</td>\n<td style=\"text-align:right\">19,995</td>\n<td>CRM activities: calls, emails, meetings (first 30 days per lead)</td>\n</tr>\n<tr>\n<td>opportunities</td>\n<td style=\"text-align:right\">4,004</td>\n<td>Deal records opened before the 30-day snapshot</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Snapshot-safe:</strong> event tables contain only rows with timestamps ≤ 30 days from lead\ncreation. Outcome columns (<code>converted_within_90_days</code>, <code>conversion_timestamp</code>,\n<code>close_outcome</code>) are excluded from the public relational tables — they appear only in the\ntask splits.</p>\n<hr />\n<h2>Features</h2>\n<table>\n<thead>\n<tr>\n<th>Category</th>\n<th style=\"text-align:right\">Columns</th>\n<th>Examples</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Account</td>\n<td style=\"text-align:right\">6</td>\n<td><code>account_id</code>, <code>industry</code>, <code>region</code></td>\n</tr>\n<tr>\n<td>Contact</td>\n<td style=\"text-align:right\">4</td>\n<td><code>contact_id</code>, <code>role_function</code>, <code>seniority</code></td>\n</tr>\n<tr>\n<td>Lead metadata</td>\n<td style=\"text-align:right\">3</td>\n<td><code>lead_id</code>, <code>lead_created_at</code>, <code>lead_source</code></td>\n</tr>\n<tr>\n<td>Engagement</td>\n<td style=\"text-align:right\">11</td>\n<td><code>touch_count</code>, <code>inbound_touch_count</code>, <code>outbound_touch_count</code></td>\n</tr>\n<tr>\n<td>Sales</td>\n<td style=\"text-align:right\">6</td>\n<td><code>activity_count</code>, <code>days_since_last_touch</code>, <code>opportunity_created</code></td>\n</tr>\n<tr>\n<td>Target</td>\n<td style=\"text-align:right\">1</td>\n<td><code>converted_within_90_days</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>⚠ Intentional leakage trap:</strong> <code>total_touches_all</code> aggregates touches over the full\n90-day window (not just the 30-day feature window) and is deliberately retained as a\nleakage-detection teaching exercise. It is flagged <code>leakage_risk=True</code> in\n<code>feature_dictionary.csv</code>. Drop it from your feature set unless you are studying leakage.</p>\n<p>See <code>feature_dictionary.csv</code> for the full column-by-column specification.</p>\n<hr />\n<h2>The simulated world</h2>\n<p>The dataset simulates a fictional company — <strong>Veridian Technologies</strong> — a Series B\nstartup (Austin, TX, founded 2017) selling <strong>Veridian Procure</strong>, a cloud\nprocurement / AP automation SaaS. Everything below is invented:</p>\n<ul>\n<li><strong>Target customers:</strong> 200–2,000-employee firms in the US and UK (manufacturing,\nlogistics, healthcare, professional services)</li>\n<li><strong>Deal range:</strong> $18,000–$120,000 ACV; average deal $42,000; average sales cycle 45 days</li>\n<li><strong>Go-to-market:</strong> 45% inbound marketing, 35% SDR outbound, 20% partner referrals</li>\n<li><strong>Buyer personas:</strong> VP Finance (economic buyer), AP Manager (champion), IT Director\n(technical evaluator), Procurement Manager (end user)</li>\n</ul>\n<p>In this public version, the hidden causal graph, latent trait scores, and mechanism\nparameters are withheld. The instructor companion bundle includes them.</p>\n<hr />\n<h2>How to load</h2>\n<pre><code class=\"language-python\">import pandas as pd\n\n# Flat CSV — all leads, all splits combined (convenient for exploration)\ndf = pd.read_csv(&quot;lead_scoring.csv&quot;)\nX = df.drop(columns=[&quot;converted_within_90_days&quot;])\ny = df[&quot;converted_within_90_days&quot;]\n\n# Parquet task splits — recommended for model training\ntrain = pd.read_parquet(&quot;tasks/converted_within_90_days/train.parquet&quot;)\nvalid = pd.read_parquet(&quot;tasks/converted_within_90_days/valid.parquet&quot;)\ntest  = pd.read_parquet(&quot;tasks/converted_within_90_days/test.parquet&quot;)\n\n# Relational tables — for feature engineering\nleads   = pd.read_parquet(&quot;tables/leads.parquet&quot;)\ntouches = pd.read_parquet(&quot;tables/touches.parquet&quot;)\n</code></pre>\n<p>Splits are 70 / 15 / 15 (train / valid / test), stratified on the target, deterministic\ngiven seed 42.</p>\n<p><strong>Note on account overlap:</strong> ~93% of test-set accounts also appear in the training set\n(splits are keyed on <code>lead_id</code>). Headline AUC overstates generalisation to <em>unseen</em>\naccounts. For a faithful out-of-sample estimate, use\n<code>GroupKFold(groups=df[&quot;account_id&quot;])</code>.</p>\n<hr />\n<h2>Reproducibility</h2>\n<p>Generated with <strong>leadforge v1.0.0</strong>, recipe <code>b2b_saas_procurement_v1</code>, seed 42,\ndifficulty <code>advanced</code>. To reproduce:</p>\n<pre><code class=\"language-bash\">pip install leadforge\nleadforge generate --recipe b2b_saas_procurement_v1 --seed 42 \\\n                   --mode student_public --difficulty advanced --out my_bundle\n</code></pre>\n<p>Every file in this bundle is SHA-256 hashed in <code>manifest.json</code>. Run\n<code>leadforge validate my_bundle</code> to verify integrity.</p>\n<p><strong>Author:</strong> <a href=\"https://huggingface.co/shaypal5\">Shay Palachy Affek</a> · <a href=\"https://www.kaggle.com/derelictpanda\">Kaggle</a> · <a href=\"https://github.com/shaypalachy\">GitHub</a></p>\n<hr />\n<h2>Caveats</h2>\n<ul>\n<li><strong>Synthetic data only.</strong> No real company, customer, or market is represented.</li>\n<li><strong>AUC does not distinguish tiers.</strong> LR AUC is ~0.62 in this tier — similar to the\nother two tiers. The tiers differ in conversion rate (43% / 22% / 8%), noise, and\nmissing values — not in rank discrimination. Use average precision, P@K, and\ncalibration metrics to see the difficulty gradient.</li>\n<li><strong>Artifact zeros in count/duration features.</strong> Gaussian noise is applied before MCAR\nmissingness; values clamped below zero to zero. Suspicious zero clusters in count\nfeatures (e.g. <code>days_since_last_touch = 0</code>) may be noise artifacts rather than genuine\nzero values — treat them as intentional data-cleaning material.</li>\n<li><strong>~93% train/test account overlap.</strong> Splits are keyed on <code>lead_id</code>; most test accounts\nalso appear in train. Headline metrics overstate generalisation to unseen accounts.</li>\n<li><strong>Snapshot window.</strong> Engagement features cover days 0–30 per lead; the label resolves\nat day 90. <code>total_touches_all</code> is the intentional exception — it aggregates over the\nfull 90-day window and is a leakage trap.</li>\n<li><strong>Public version.</strong> The hidden causal graph, latent trait scores, and mechanism\nparameters are withheld. The instructor companion bundle includes them.</li>\n</ul>\n",
      "tags": [
        "tabular",
        "lead-scoring",
        "synthetic-data",
        "crm",
        "b2b",
        "datasets",
        "pandas",
        "advanced"
      ],
      "coverImage": "../dataset-cover-image.png",
      "splits": [
        "train",
        "valid",
        "test"
      ],
      "subsets": [
        "leadforge-lead-scoring-v1-advanced"
      ],
      "splitRowCounts": {},
      "files": [
        {
          "path": "lead_scoring.csv",
          "size": "1270 KB",
          "kind": "CSV",
          "sourcePath": "../advanced/lead_scoring.csv",
          "about": "Flat ML-ready snapshot CSV: 5,000 leads × 32 columns (including 'split'), snapshot day 30.  The 'split' column (train / valid / test) lets conventional ML workflows load a single file.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "feature_dictionary.csv",
          "size": "3 KB",
          "kind": "CSV",
          "sourcePath": "../advanced/feature_dictionary.csv",
          "about": "Per-column documentation: dtype, analytical category, leakage-risk flag, and plain-language description.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/train.parquet",
          "size": "199 KB",
          "kind": "Parquet",
          "sourcePath": "../advanced/tasks/converted_within_90_days/train.parquet",
          "about": "Training split — 3,500 leads, stratified by conversion rate.  Target column: `converted_within_90_days` (bool).",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/valid.parquet",
          "size": "61 KB",
          "kind": "Parquet",
          "sourcePath": "../advanced/tasks/converted_within_90_days/valid.parquet",
          "about": "Validation split — 750 leads.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "tasks/converted_within_90_days/test.parquet",
          "size": "61 KB",
          "kind": "Parquet",
          "sourcePath": "../advanced/tasks/converted_within_90_days/test.parquet",
          "about": "Test split — 750 leads, held out for final evaluation only.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        },
        {
          "path": "dataset_card.md",
          "size": "7 KB",
          "kind": "Dataset card",
          "sourcePath": "../advanced/dataset_card.md",
          "about": "Auto-generated tier-specific dataset card.",
          "splitRowCounts": {},
          "columnDtypes": {},
          "meta": {},
          "groupType": "files",
          "groupTitle": "Files"
        }
      ],
      "artifactGroups": [],
      "columns": [
        "split",
        "account_id",
        "industry",
        "region",
        "employee_band",
        "estimated_revenue_band",
        "process_maturity_band",
        "contact_id",
        "role_function",
        "seniority",
        "buyer_role",
        "lead_id",
        "lead_created_at",
        "lead_source",
        "touch_count",
        "inbound_touch_count",
        "outbound_touch_count",
        "session_count",
        "pricing_page_views",
        "demo_page_views",
        "total_session_duration_seconds",
        "touches_days_0_7",
        "touches_last_7_days",
        "days_since_first_touch",
        "activity_count",
        "days_since_last_touch",
        "opportunity_created",
        "has_open_opportunity",
        "opportunity_estimated_acv",
        "expected_acv",
        "total_touches_all",
        "converted_within_90_days"
      ],
      "rows": [
        {
          "split": "train",
          "account_id": "acct_000773",
          "industry": "logistics",
          "region": "UK",
          "employee_band": "200-499",
          "estimated_revenue_band": "$50M-$200M",
          "process_maturity_band": "low",
          "contact_id": "cnt_001124",
          "role_function": "procurement_manager",
          "seniority": "vp",
          "buyer_role": "end_user",
          "lead_id": "lead_004250",
          "lead_created_at": "2024-01-08",
          "lead_source": "inbound_marketing",
          "touch_count": "",
          "inbound_touch_count": "8.0",
          "outbound_touch_count": "0.0",
          "session_count": "1.0",
          "pricing_page_views": "1.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "484.0",
          "touches_days_0_7": "1.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "",
          "activity_count": "6.0",
          "days_since_last_touch": "",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "37904.684742284786",
          "expected_acv": "0.0",
          "total_touches_all": "17",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000043",
          "industry": "logistics",
          "region": "UK",
          "employee_band": "500-999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "high",
          "contact_id": "cnt_003354",
          "role_function": "it_director",
          "seniority": "c_suite",
          "buyer_role": "technical_evaluator",
          "lead_id": "lead_001565",
          "lead_created_at": "2024-01-01",
          "lead_source": "inbound_marketing",
          "touch_count": "9.0",
          "inbound_touch_count": "9.0",
          "outbound_touch_count": "0.0",
          "session_count": "",
          "pricing_page_views": "4.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "900.0",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "30.62883305317309",
          "activity_count": "4.0",
          "days_since_last_touch": "",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "52534.606039186896",
          "expected_acv": "80533.53467639766",
          "total_touches_all": "11",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000319",
          "industry": "logistics",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$1M-$10M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_000537",
          "role_function": "ap_manager",
          "seniority": "director",
          "buyer_role": "champion",
          "lead_id": "lead_002296",
          "lead_created_at": "2024-01-05",
          "lead_source": "partner_referral",
          "touch_count": "9.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "9.0",
          "session_count": "4.0",
          "pricing_page_views": "",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "1065.0",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "2.0",
          "days_since_first_touch": "27.053826214825193",
          "activity_count": "2.0",
          "days_since_last_touch": "3.2322809610775023",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "15449.44694066237",
          "total_touches_all": "17",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000476",
          "industry": "healthcare_non_clinical",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_001478",
          "role_function": "ap_manager",
          "seniority": "director",
          "buyer_role": "champion",
          "lead_id": "lead_003320",
          "lead_created_at": "2024-01-29",
          "lead_source": "inbound_marketing",
          "touch_count": "13.0",
          "inbound_touch_count": "13.0",
          "outbound_touch_count": "0.0",
          "session_count": "4.0",
          "pricing_page_views": "",
          "demo_page_views": "",
          "total_session_duration_seconds": "1381.0",
          "touches_days_0_7": "1.0",
          "touches_last_7_days": "1.0",
          "days_since_first_touch": "45.22346496603029",
          "activity_count": "4.0",
          "days_since_last_touch": "0.0",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "",
          "expected_acv": "",
          "total_touches_all": "14",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000243",
          "industry": "manufacturing",
          "region": "US",
          "employee_band": "1000-1999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "low",
          "contact_id": "cnt_000276",
          "role_function": "vp_finance",
          "seniority": "individual_contributor",
          "buyer_role": "economic_buyer",
          "lead_id": "lead_001192",
          "lead_created_at": "2024-01-01",
          "lead_source": "sdr_outbound",
          "touch_count": "",
          "inbound_touch_count": "",
          "outbound_touch_count": "8.0",
          "session_count": "2.0",
          "pricing_page_views": "",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "1128.0",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "2.0",
          "days_since_first_touch": "45.22346496603029",
          "activity_count": "1.0",
          "days_since_last_touch": "",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "47588.58048001376",
          "expected_acv": "33774.175358841734",
          "total_touches_all": "11",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000353",
          "industry": "manufacturing",
          "region": "UK",
          "employee_band": "2000+",
          "estimated_revenue_band": "$1M-$10M",
          "process_maturity_band": "medium",
          "contact_id": "cnt_002665",
          "role_function": "procurement_manager",
          "seniority": "vp",
          "buyer_role": "end_user",
          "lead_id": "lead_000123",
          "lead_created_at": "2024-01-27",
          "lead_source": "sdr_outbound",
          "touch_count": "6.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "6.0",
          "session_count": "2.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "",
          "touches_days_0_7": "4.0",
          "touches_last_7_days": "",
          "days_since_first_touch": "",
          "activity_count": "3.0",
          "days_since_last_touch": "3.1313429432706332",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "23500.1989513667",
          "total_touches_all": "15",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_000029",
          "industry": "healthcare_non_clinical",
          "region": "US",
          "employee_band": "500-999",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "low",
          "contact_id": "cnt_001377",
          "role_function": "procurement_manager",
          "seniority": "individual_contributor",
          "buyer_role": "end_user",
          "lead_id": "lead_001076",
          "lead_created_at": "2024-01-18",
          "lead_source": "sdr_outbound",
          "touch_count": "11.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "11.0",
          "session_count": "0.0",
          "pricing_page_views": "0.0",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "0.0",
          "touches_days_0_7": "5.0",
          "touches_last_7_days": "2.0",
          "days_since_first_touch": "30.198516796116404",
          "activity_count": "2.0",
          "days_since_last_touch": "3.7664633484817576",
          "opportunity_created": "False",
          "has_open_opportunity": "False",
          "opportunity_estimated_acv": "",
          "expected_acv": "75796.79050905118",
          "total_touches_all": "14",
          "converted_within_90_days": "False"
        },
        {
          "split": "train",
          "account_id": "acct_001411",
          "industry": "professional_services",
          "region": "US",
          "employee_band": "200-499",
          "estimated_revenue_band": "$10M-$50M",
          "process_maturity_band": "high",
          "contact_id": "cnt_002913",
          "role_function": "vp_finance",
          "seniority": "c_suite",
          "buyer_role": "economic_buyer",
          "lead_id": "lead_001584",
          "lead_created_at": "2024-01-09",
          "lead_source": "sdr_outbound",
          "touch_count": "3.0",
          "inbound_touch_count": "0.0",
          "outbound_touch_count": "3.0",
          "session_count": "",
          "pricing_page_views": "",
          "demo_page_views": "0.0",
          "total_session_duration_seconds": "234.0",
          "touches_days_0_7": "2.0",
          "touches_last_7_days": "",
          "days_since_first_touch": "28.188032773479",
          "activity_count": "6.0",
          "days_since_last_touch": "3.2455395630901305",
          "opportunity_created": "True",
          "has_open_opportunity": "True",
          "opportunity_estimated_acv": "258999.4780423338",
          "expected_acv": "0.0",
          "total_touches_all": "13",
          "converted_within_90_days": "False"
        }
      ],
      "profileStats": null,
      "huggingFaceValidation": {},
      "discussions": [
        "What is `snapshot_day = 30` and how does it affect which features are valid at inference time?",
        "Is `total_touches_all` a safe feature or a time-window leakage trap?",
        "LR and GBM AUCs are very close across tiers — does relational feature engineering help?",
        "How would you set a probability threshold for a team that can only work 50 leads per week?",
        "What happens to AUC when you evaluate on a chronological hold-out instead of a random split?"
      ]
    }
  ],
  "mockNotice": "This is a ShmuggingFace review mock. It is not Hugging Face, Kaggle, or a real dataset release.",
  "validationWarnings": []
}