# From postcard to property purchase

This interactive T2K showcase follows a fictional regional business that buys
houses from homeowners, renovates them, and resells them. All people, properties,
markets, events, amounts, and outcomes are synthetic.

[Open the showcase](https://t2k.ai/demos/cash-homebuyer/).

## Try the three questions

1. **Which recorded sources receive credit?** Change the evidence scenario,
   reporting cutoff, and attribution method. A postcard dispatch is not proof
   that a seller saw it. A reviewed seller statement is reported influence.
   Duplicate calls, coowners, and sales follow-up do not create extra acquisitions.
2. **What supports channel investment?** Inspect an actual Google Meridian 2.0.0
   fit to generated weekly data. Its uncertainty and model limitations remain
   visible. The sparse acquisition outcome has no fitted model.
3. **Can this budget proposal proceed?** Compare three authored $90,000 monthly
   mixes with channel bounds, purchase capital, assessment slots, and renovation
   slots. A feasible mix still requires model and business review. No advertising
   account is connected and no spending is authorized.

## Measurement boundaries

The attribution outcome is one newly qualified seller-property opportunity.
The selected contract, acquisition, or resale snapshot determines which records
were available, including when a source was recorded and a seller report reviewed.
Attribution does not silently change into a closed-deal or profit model when a
later milestone appears. A canceled contract remains a historical contract and
has zero acquisitions.

First and last touch use the earliest or latest eligible interaction, with event
ID breaking timestamp ties. Linear attribution divides credit equally across
distinct eligible channels; repeated activity on one channel does not increase
its share. Observed-only and observed-plus-reviewed-report policies remain
separate. Missing call-source mapping withholds final allocation while preserving
independently supported clicks. These rules assign credit, not causal lift.

T2K Core 0.7.0 executes the bounded evidence eligibility query. The public bundle
contains 48 actual Core receipts and 144 application results. Application code
calculates attribution fractions, financial outcomes, and capacity constraints.
Core's complete coverage refers only to the authored source ledger. It does not
establish completeness of real-world tracking or truth of a source.

The synthetic property has a $210,000 purchase, $295,000 resale, $40,000 renovation,
and $18,000 holding/financing/transaction costs. Complete records yield $27,000
contribution before acquisition marketing and $24,000 after a declared $3,000
marketing allocation. Purchase price is capital deployed. Before resale or when
costs are missing, realized contribution is unknown. These are example amounts,
not industry benchmarks or a forecast.

## What the MMM establishes

The generated aggregate dataset covers 156 modeled weeks (2023-01-02 through
2025-12-22) in four fictional markets, with eight earlier media-history weeks.
Its outcome is newly qualified seller-property opportunities. Treatments are
direct mail, paid search, and paid social. Organic and referral effects are not
separately estimated. Paid search combines brand and nonbrand activity.

This aggregate fixture is separate from the individual 2026 journey. The sparse
acquisition series is generated independently, too. Do not join these examples
or calculate lead-to-acquisition rates from their totals.

Displayed intervals are 90% equal-tail posterior credible intervals, conditional
on the declared model. They are not confidence scores or guarantees of causal
accuracy. The fit uses four chains and 500 retained draws per chain. Maximum
R-hat is 1.006833, minimum bulk effective sample size is 664.878729, and there are
zero divergences. Nevertheless, its baseline interval crosses below zero and
5.3% of retained draws have a negative aggregate baseline. The model therefore
requires review. Good sampling diagnostics do not establish model adequacy.

No holdout evaluation, experiment calibration, real-operator validation,
acquisition/profit model, future forecast, or budget optimization was performed.
The budget mixes are human-authored examples. Purchase-capital capacity excludes
renovation, holding, and marketing funding, which need separate review.

## Inspect and reproduce

- [Complete measurement bundle and exact Core receipts](./bundle.json)
- [Standalone Core and attribution verifier](./reproduce.mjs)
- [MMM estimates, diagnostics, scope, and provenance](./mmm.json)
- [MMM source, data, dependency lock, and retained summary draws](./mmm-source.tar.gz)

To reproduce the Core receipts and credit calculations outside this repository,
use Node.js 20.10 or later in a new directory:

```sh
npm init -y
npm install --save-exact @t2kai/core@0.7.0
curl --fail -O https://t2k.ai/demos/cash-homebuyer/bundle.json
curl --fail -O https://t2k.ai/demos/cash-homebuyer/reproduce.mjs
node reproduce.mjs
```

The verifier checks the installed Core build, every execution receipt, application
hashes, and declared credit fractions. It does not independently validate the
economic ledger or the modeled causal effect. Extract the MMM archive into a
separate directory and follow its README to check the retained draws or refit
with the exact dependency lock. The full posterior is hashed in the run record;
the smaller public archive contains the actual retained summary draws used for
the displayed intervals. New fits can differ numerically across hardware.

In the T2K source checkout:

```sh
npm ci
npm run check:cash-homebuyer
npm run demo:cash-homebuyer -- --check
```

The independent acceptance fixtures cover missing/duplicate/late evidence,
seller and property identity, cancellations, incomplete costs, closing identity,
review timestamps, channel bounds, capital, and operating capacity. These checks
establish behavior within the synthetic fixture scope.

## Implementation references

- [Meridian data requirements](https://developers.google.com/meridian/docs/pre-modeling/collect-data)
- [Meridian model execution](https://developers.google.com/meridian/docs/user-guide/run-model)
- [Meridian analyzer and counterfactual calculations](https://developers.google.com/meridian/reference/api/meridian/analysis/analyzer/Analyzer)
- [Meridian source and Apache 2.0 license](https://github.com/google/meridian)
- [T2K developer resources](https://t2k.ai/developers/)
