# GreenLeaf reporting data dictionary — v1 semantic contract

**Isinulat:** 2026-10-29 · **Katayuan:** naka-frozen na source specification bago gumawa ng fixture; English editorial input. Ang CSV ay isang bagong synthetic reconstruction, hindi nabawi na data ng kurso. Ang [brief](brief-v1.md) ang namamahala sa mga desisyon; ang [source map](course-source-map.json) ang namamahala sa provenance. Walang kasamang tunay na customer, impormasyon sa kalusugan, o account ng kliyente.

## Grain, window, at attribution

Ang isang canonical na row ay isang UTC paid-click date × channel × device × audience × creative, sa UK. Labing-apat na petsa × tatlong channel × dalawang device × dalawang audience × dalawang creative = **336 row**. Ang raw export ay may **337 row**, kabilang ang isang eksaktong duplicate. Ang campaign ay kabilang sa channel at hindi nagdaragdag ng dimensyon.

Linggo 1: `2026-09-01`–`2026-09-07` inclusive. Linggo 2: `2026-09-08`–`2026-09-14` inclusive. Snapshot: **`2026-09-22T23:59:59Z`**. Ang mga araw ay UTC at ang `date` ay laging nangangahulugang petsa ng paid-click cohort, hindi kailanman petsa ng pagbili/event. Ang mga funnel event at unang pagbili ay inoobserbahan sa loob ng pitong araw pagkatapos ng eligible paid click. Ang mga eksaktong event timestamp ay hindi ini-export; ang seven-day attribution/observation window ay isang assumption sa konstruksyon ng generator. Pareho nang mature ang mga kumpletong panahon sa snapshot. Lahat ng nai-publish na primary row ay may `is_provisional=false`.

Inilalarawan ng spend, impression, at click ang aktibidad ng acquisition na nakatalaga sa petsa ng cohort na iyon. Ang mga bilang ng landing, quiz, at pagbili ay sumusunod sa source-tagged na paid-click cohort nito at bucket ng device/audience/creative. Ang bawat synthetic na first-purchase customer at halaga ng kita ay itinatalaga nang isang beses, sa huling eligible paid click sa loob ng pitong araw; lahat ng yugto ng event ay sumusunod sa parehong eksklusibong pagtatalaga. Ang cross-device identity reconciliation ay hindi sinusukat. Ang eksklusibidad ay ginagarantiyahan ng konstruksyon, hindi nakapag-iisang itinatag ng aggregate na file na ito.

## Mga Field

| Field | Uri / yunit | Kahulugan at pagpapatunay |
|---|---|---|
| `row_id` | hindi walang laman na string | Matatag na natatanging canonical row ID. Inuulit ito ng raw exact duplicate; ang magkasalungat na row na may parehong ID ay isang error. |
| `date` | ISO `YYYY-MM-DD` | Petsa ng UTC source paid-click cohort, sa loob ng September 1–14. |
| `market` | enum | `UK` lamang; ang saklaw ay mga paid cohort sa kathang-isip na paglulunsad sa UK. |
| `channel` | enum | `google-search`, `linkedin`, `reddit-paid`. Ang organic Reddit activity ay hindi kasama. |
| `campaign_id` | enum pagkatapos ng normalisasyon | Isang campaign bawat channel; lookup sa ibaba. |
| `device` | enum | `mobile` o `desktop`, device ng nakatalagang source paid click. |
| `audience_id` | enum | `skeptical` o `exploring`; mutually exclusive na ginawang mga bucket sa loob ng channel, hindi mga beripikadong katangian ng customer. |
| `creative_id` | enum | `traceability` o `value`; mga hypothesis ng mensahe na may format na partikular sa channel, lookup sa ibaba. |
| `spend_cents` | hindi negatibong integer na sentimo ng USD | Gastos sa media lamang. Walang agency, creative, tooling, suweldo, o iba pang gastos sa acquisition. |
| `impressions` | hindi negatibong integer | Mga impression ng acquisition ad sa bucket; hindi natatanging tao o frequency. |
| `clicks` | hindi negatibong integer | Mga paid click na nakatalaga sa bucket na ito; hindi natatanging bisita. |
| `landing_sessions` | hindi negatibong integer | Source-tagged na landing session na naobserbahan sa loob ng pitong araw pagkatapos ng eligible paid click. Hindi hihigit sa isang napanatiling session bawat synthetic na funnel journey. |
| `quiz_starts` | hindi negatibong integer | Natatanging napanatiling source-tagged na quiz journey na nagsisimula sa loob ng parehong pitong-araw na window; isang napanatiling pagsisimula bawat journey. Denominator ng completion rate. |
| `quiz_completions` | hindi negatibong integer | Yaong mga napanatiling quiz journey na natapos sa loob ng parehong pitong-araw na window; walang paulit-ulit na pagbibilang ng completion. |
| `attributed_new_customers` | hindi negatibong integer | Mga first-purchase customer na kumukumpleto ng ginawang quiz-led funnel na ito sa loob ng pitong araw, itinatalaga nang isang beses ng idineklarang last-paid-click rule. Hindi lahat ng bagong customer sa buong site. |
| `attributed_first_purchase_revenue_cents` | hindi negatibong integer na sentimo ng USD | Kita sa unang pagbili mula sa mga customer na iyon, pagkatapos ng mga discount, hindi kasama ang buwis at pagpapadala. Walang refund sa fixture na ito; walang renewal revenue. Itinatalaga ng generator ang USD $80 (8,000 sentimo) bawat first-purchase customer para sa linaw ng aritmetika; ito ay assumption sa reconstruction, hindi pagpepresyo ng kurso o LTV. |
| `is_provisional` | boolean | Ang `false` ay nangangahulugang mature na ang pitong-araw na observation window ng row na ito sa idineklarang snapshot. Tanggihan ang hindi suportadong string/boolean coercion. |

Mga hindi pagkakapantay-pantay bawat row: `impressions >= clicks >= landing_sessions >= quiz_starts >= quiz_completions >= attributed_new_customers`. Ito ay malinaw na pinasimpleng konstruksyon ng quiz-led funnel, hindi isang unibersal na katangian ng mga export ng advertising. Ang row na may zero na customer ay dapat may zero na kita sa unang pagbili; ang positibong bilang ng customer ay dapat may positibong kita. Ang mga constraint na ito ay hindi nagbibigay ng ebidensya sa antas ng tao.

## Canonical lookups at raw cleanup

| Channel | Canonical campaign ID | Display name | Pinapayagang raw campaign ID alias |
|---|---|---|---|
| `google-search` | `gl-uk-google-search` | GreenLeaf UK Search | `gl_uk_search` → `gl-uk-google-search` |
| `linkedin` | `gl-uk-linkedin` | GreenLeaf UK LinkedIn | Wala |
| `reddit-paid` | `gl-uk-reddit-paid` | GreenLeaf UK Reddit paid | Wala |

Audience `skeptical`: ginawang bucket para sa isang mamimiling naghahanap ng patunay na nagkukumpara ng ebidensya sa sourcing/dosing; hango sa hindi beripikadong persona ni Oliver. Audience `exploring`: ginawang bucket para sa isang mamimiling sumusuri sa kategorya at isinasaalang-alang ang halaga. Hindi ito tunay na mga espesipikasyon sa targeting o randomized na pagtatalaga ng treatment; walang ini-infer na pagkakakilanlan, propesyon, o kondisyon sa kalusugan.

Creative `traceability`: halimbawang mensaheng “Know what is in every serving” (Alamin kung ano ang laman ng bawat serving). Creative `value`: halimbawang mensaheng “Compare the value of a clearly dosed serving” (Ihambing ang halaga ng bawat serving na may malinaw na dosis). Para sa Google Search, ito ay mga hypothesis ng text-ad message; para sa LinkedIn, mga hypothesis ng sponsored-feed copy; para sa Reddit paid, mga hypothesis ng promoted-post copy. Ang mga creative ID ay magkakaparehong kategorya ng mensahe sa loob ng bawat channel, hindi magkakahawig na tapos na ad asset o aprubadong claim. Walang ibinigay na patunay ng bisa o aktwal na sertipikasyon ng produkto.

Alisin lamang ang isang byte-for-byte/equal-field na eksaktong duplicate, na itinatala ang source row ID nito. I-normalize lamang ang idineklarang alias at itala ang bilang. Ang hindi kilalang ID, hindi inaasahang merkado, nawawalang field, maling petsa, hindi integer na sentimo/bilang, negatibong halaga, magkasalungat na duplicate, o imposibleng funnel ay dapat bumigo sa pagpapatunay sa halip na tahimik na ayusin. Panatilihin ang isang dokumentadong row na may zero denominator upang i-verify ang paghawak ng hindi makukuhang ratio. I-reconcile ang mga bilang ng raw/canonical at lahat ng kabuuan ng dimensyon. Dapat tukuyin ng talaan ng paggawa ng fixture ang eksaktong duplicate, alias row, at row na may zero denominator; hindi nagpapanggap ang dictionary na mayroon na ang mga row na iyon.

## Mga panuntunan sa pagsukat at paghahambing

Gumamit ng mga sum sa loob ng napiling cohort/dimensyon, pagkatapos ay hatiin; huwag kailanman i-average ang mga rate sa antas ng row. Panatilihin ang buong intermediate precision. Ipakita ang USD sa pamamagitan ng paghahati ng sentimo sa 100 lamang sa presentasyon. Ang zero denominator ay nagbibigay ng **hindi makukuha**, hindi kailanman zero/infinity; ang pagbabago ng porsyento laban sa zero na naunang halaga ay hindi makukuha. Pinapanatili sa mga numerong hango sa ebidensyang Ingles ang kumbensiyon ng pinagmulan: kuwit para sa libuhan at tuldok para sa desimal; nasa USD ang lahat ng halagang pera.

| Pagsukat | Kahulugan | Interpretasyon |
|---|---|---|
| Quiz completion rate | `sum(quiz_completions) / sum(quiz_starts)` | Pangunahing funnel KPI; ang paid-mobile Linggo 1/2 ay dapat i-calibrate sa 45%/28%. |
| Click-to-start rate | `sum(quiz_starts) / sum(clicks)` | Diagnostic; naiiba sa quiz completion. |
| Click-to-landing rate | `sum(landing_sessions) / sum(clicks)` | Diagnostic, hindi beripikadong bounce rate. |
| Completion-to-purchase rate | `sum(attributed_new_customers) / sum(quiz_completions)` | Ginawang diagnostic ng quiz-led funnel. |
| CTR | `sum(clicks) / sum(impressions)` | Pagsukat sa optimization; hindi awareness. |
| CPC (USD) | `sum(spend_cents) / sum(clicks) / 100` | Gastos sa media bawat click. |
| CPM (USD) | `sum(spend_cents) / sum(impressions) * 1000 / 100` | Gastos sa media bawat 1,000 impression. |
| Media CPA (USD) | `sum(spend_cents) / sum(attributed_new_customers) / 100` | Media-only proxy; hindi buong CAC. |
| Attributed first-order ROAS | `sum(attributed_first_purchase_revenue_cents) / sum(spend_cents)` | Ratio ng kita/gastos; hindi tubo, incrementality, o LTV. |
| Kita sa unang pagbili (USD) | `sum(attributed_first_purchase_revenue_cents) / 100` | Attribution ng paid cohort lamang; hindi hatol laban sa target ng $60K sa buong buwan. |

Ang pagbabago ng percentage point ng isang rate ay `(Week 2 rate - Week 1 rate) * 100`. Ang relative change ay `(Week 2 rate / Week 1 rate - 1) * 100` kapag positibo ang Linggo 1. Ang ginawang 45% → 28% ay katumbas ng −17 percentage point at humigit-kumulang −37.8% relative; walang ibang resulta ang paunang itinakda ng source contract na ito.

Bago i-diagnose ang paggalaw ng mobile aggregate, i-stratify ang mobile ayon sa channel × audience × creative. Para sa stratum `s`, itakda ang fixed weight `w_s = Week 1 starts_s / Week 1 total starts`. Ikumpara ang `sum(w_s * Week 1 completion_rate_s)` sa `sum(w_s * Week 2 completion_rate_s)` at ikumpara ang pareho sa mga naobserbahang rate. I-publish ang mga weight at bilang. Ang stratum na may positibong weight na walang tinukoy na rate sa Linggo 2 ay gumagawa ng hindi makukuhang buong fixed-mix na paghahambing; anumang malinaw na pinaghihigpitang paghahambing ng karaniwang strata ay dapat ibunyag ang mga hindi kasamang bilang/weight at hindi maaaring tahimik na tumayo para sa kabuuan. Ang stratum na may zero weight ay nag-aambag ng zero at hindi nangangailangan ng rate. Ang pagbabago ng mix at paggalaw sa loob ng stratum ay maaaring magkasabay. Hindi pinapatunayan ng alinman ang isang dahilan; hindi randomized ang mga cohort.

Ang hindi kumpletong snapshot o pansamantalang primary row ay gumagawa ng dalawang buong panahon na hindi tiyak/hindi maihahambing. Huwag tratuhin bilang zero ang mga hindi naobserbahang kinalabasan. Ang isang hiwalay na napiling paghahambing na may magkaparehong mature na saklaw ay dapat sabihin ang mga napiling petsa, mga pagbubukod, at binagong tanong.

## Hindi makukuhang ebidensya at mga salungatan sa source

Hindi makukuha: buong CAC, tubo, retention, realized 12-buwan na LTV, awareness, incrementality, tunay na all-channel/buwan na kita, frequency, impression share, bounce rate, event/release log, interbyu sa customer, at mga paliwanag na causal. Ang hiwalay na 4.2% “quiz CVR” ng source asset ay walang sapat na karaniwang kahulugan ng denominator dito; huwag itong i-import. Walang loss estimate, segment multiple, tagubilin sa badyet, o organic-to-paid causal story mula sa screenshot na isang nakuha na resulta ng fixture. Tingnan ang source map para sa mga katotohanan ng kurso laban sa mga bagong ginawang assumption.
