Every sales dataset you will touch in this program is organised as a tree. Reading top-down: category → brand → sub-brand → sub-variant → pack size → SKU. The KT sessions walk it with a laundry example: fabric cleaning is the category, Surf is the brand, Surf Excel is a sub-brand within it, and Surf Excel Plus a sub-variant of that sub-brand. Below the sub-variant sit pack type and pack size, and at the very bottom the SKU (stock keeping unit) - the lowest grain a till can scan. Nielsen's raw files carry the same tree with a manufacturer layer on top and pack type between variant and size.
The SKU level is subtler than it looks: two 250g packs of the same variant, one carrying "+20% extra" and one "+1 sachet free", are two different SKUs with different price points and different price elasticities - recommendations genuinely differ at that grain.
The property that makes the tree usable is sum-consistency: every level must sum exactly to the level above it. All sub-brands of Surf sum to Surf; all SKUs of a pack size sum to that pack size. This is your first validation on any new sales feed - if variant volumes do not re-sum to the brand total, something is wrong with the mapping, not the market.
Geography and retail channel are cuts on top of this tree (national, regional, modern vs traditional trade), not levels within it. Which rung a cell models at is a market decision: India typically asks for reads at format level (powder / liquid / bar) while the UK asks at variant level - because that is the level UK campaigns can be tracked back to. The activation level drives the read level, which brings us to mappability below.
Two pieces of client lingo you will hear in every design call. ATL (above the line) is media - TV, digital, social, search, anything a consumer gets exposed to. BTL (below the line) is promo and trade activity - discounts, displays, retailer deals. The "line" is the shop roof: above it you talk to consumers, below it you work the store.
Data itself arrives from four kinds of source, and knowing which is which tells you how much to trust it and who to chase when it is wrong:
| Source type | What it is | Examples in this program |
|---|---|---|
Syndicated | Continuous multi-client trackers sold by a research house | Nielsen sell-out sales, Kantar panel and brand-health data |
Agency | Execution records from the client's media agency | Mindshare media plans, spends, GRP-to-impressions conversions |
Publisher | Platform-reported delivery data from the media owner | A video or social platform's own impression exports |
In-house | The client's own systems | Trade spends, launch calendars, e-commerce sales extracts |
Media has its own tree: channel → platform → campaign, with attributes such as prime/non-prime and ad length hanging off the levels rather than forming levels of their own. Raw media files arrive with 5-6 layers of hierarchy per channel; the program's presentation rule is to pick at most ~3 hierarchy columns (channel, platform, campaign) and keep the rest in the variable mapping for later pivots. A channel with a single platform simply skips the platform layer.
Channels group into three buckets, and the bucket names recur in every deliverable: traditional (TV, OOH, print, radio, cinema), digital (video, display, paid social, search, streaming audio, influencer), and e-com (retail-platform display and search). Two classification traps the trainers call out by name: CTV sits under digital, never under TV - the nomenclature line between CTV and digital video is thin, but neither belongs to the TV channel; and BVOD (broadcaster video on demand) behaves like TV even though it is streamed.
Why TV dominates the conversation: it takes 50-60% of the entire media budget in most markets and brands, so client questions concentrate there - prime vs non-prime, 15s vs 30s, which campaign within prime time. Module 1.7 makes TV the anchor of the whole media bound-setting workflow for exactly this reason.
The single most consequential taxonomy decision in a cell is media mappability: the model's granularity is decided by the level to which media execution can be tracked back. If campaigns can be mapped to a variant, you can model at variant level; if they can only be mapped to the brand, that is master brand media - brand-level execution tested against each variant's sales as its own feature.
Two hard rules follow:
- Never split master-brand spend across variants by sales share. Brand media genuinely impacts each variant, so it is tested as-is on each - and the sanity check is that brand media impact must always be lower than direct (variant-tagged) media impact.
- A national campaign carries the same coefficient everywhere. National media means identical content across the country (language aside), so when it is tested in a regional model there is no reason to believe it earns a different coefficient per region - do not sum it per region as if the executions were independent. The default classification when nothing is specified for a product or region: national-level in-brand.
Between the raw ADS and the model sits a dictionary - the methodology workbook's Channel Segregation sheet (~60 rows in the real artifact). Its job: map every raw variable name to a harmonised name plus two bucketing dimensions - Bucket 1, the reporting family (Own Price, Competitor Price, Distribution, Macro, Seasonality/Intercept, Promo, Halo, Competitor Media, Digital, Traditional), and Bucket 2, the base/incremental split. The working rule: everything driven by paid media investment is Incremental; price, distribution, promo, macro, seasonality, competitor variables and halo are all Base. The table below is illustrative (generic names, same shape as the real dictionary):
| Raw variable | Harmonised name | Bucket 1 | Bucket 2 |
|---|---|---|---|
tv_impressions_prime | TV | Traditional | Incremental |
ooh_impressions | OOH | Traditional | Incremental |
paid_social_impressions | Paid Social | Digital | Incremental |
search_branded_spend | Search | Digital | Incremental |
ecomm_search_impressions | Ecomm Search | Digital | Incremental |
price_per_sales_volume | Price | Own Price | Base |
competitor_avg_price | Comp Avg Price | Competitor Price | Base |
tdp_abs | TDP | Distribution | Base |
promo_tdp_index | Promo TDP | Promo | Base |
variantx_tv_impressions (tested on core sales) | Variant X TV Halo | Halo | Base |
Notice two things. Halo rows are media by nature but classified Base - they are cross-product effects, not the focal product's own investment. And most media rows are impressions while some (like search here) are spend - the config's use_spends mechanism covers channels where spend must proxy for impressions. Platform-level taxonomy below this dictionary is country-specific: India groups by platform type, Brazil by publisher type and ad format.
ctv_impressions. Where does it classify?competitor_tv_spends_agg (top competitors' TV spend, aggregated).promo_tdp_index.UL - KT (1).docx(4 Jun session, Amit Kumar Pal): product and media hierarchies, ATL/BTL, national-media rule, SKU elasticity nuance, CTV placement, TV budget shareUL - KT.docx(2 Jun session, Harishma S): media raw-file structure, three channel buckets, master-brand media and mappability, PMI standardisation, India format-level vs UK variant-level readsMathCo Methodology Understanding_UL.xlsxsheetsChannel Segregation(dictionary structure and bucket logic),Data Scope(hierarchy grid),Platform Segregration(India vs Brazil platform taxonomy)Training Plan_MMX.xlsxsession "MMX Data Sources understanding & Model Design" (Sujit & Arka): syndicated/agency/publisher/in-house, sell-in/sell-out