How the Trend Score is built
The Trend Score summarises one question on a 0 to 100 scale: is this keyword rising in this segment right now. It is a rank, not an absolute score. It describes a position inside one run, so the same keyword scores differently when the candidates around it change.
Breakout 30%Affinity 25%Pre-volatility 15%Year-over-year 10%Persistence 10%Diffusion 10%
1. How a score gets made
A run has five stages. Only the last two produce the score. The first three decide what is worth scoring at all.
1Harvest
›
2Screen
›
3Components
›
4Rank normalise
›
5Weighted sum
1
HarvestIssue index, related-query expansion, AI Overview topic mining, re-expansion. Whatever bias enters here becomes bias in the score.
2
Screenkeyword_info returns each candidate's gender and age split plus 48 months of search volume. Anything without a usable split, or under 80 segment searches per month, is dropped.
3
ComponentsFive components are computed for every survivor, each in its own unit.
4
Rank normaliseEach component becomes a rank percentile from 0 to 1 within this run.
5
Weighted sumMultiply by the weights, divide by the weights that were measurable, scale to 0 to 100.
2. The five components
Each one answers a different question. No single one defines a trend, which is why there are five.
Breakout 30%
Has this demand broken past its own normal level?
breakout = (mean of the last W months) ÷ (median of the 12 months before)
W = the chosen period, denominator floored at 5
Why it is here
The strongest single signal in the back-test (AUC 0.736), and the only one that held between 0.68 and 0.78 in every testable domain. It reads where demand sits against a year of its own normal rather than comparing two blocks, so it does not jump at the window boundary.
Watch out
A median denominator makes a keyword that sat near zero for a year look enormous. The 80-per-month segment floor removes most of those and the rank percentile flattens the rest, but read breakout next to absolute demand on the card.
Affinity 25%
Popular everywhere, or specifically with this group?
share_k = share of this keyword's searchers in the chosen segment
baseline = Σ(share_k × volume_k) ÷ Σ(volume_k)
affinity = share_k ÷ baseline
Why it is here
This is the one component not chosen for predictive power, because it answers a different question. High volume among women in their 20s usually just means high volume. Dividing by the category average is what isolates a genuine skew, and that is the reason a segment tool exists.
Watch out
The baseline comes from this run's pool, so the same keyword scores differently under a different category. Do not quote it outside the run. Markets without gender and age data drop this component entirely.
Pre-volatility 15%
Is this demand already unsteady?
volatility = standard deviation ÷ mean of the last 12 months
Why it is here
Second strongest (AUC 0.709). A keyword about to break out is already unstable; one that has never moved keeps not moving. This reads readiness to move, not direction.
Watch out
Weak where everything is volatile by nature, such as stocks (0.517). The within-run percentile absorbs the level difference, but discount this component in a stocks run.
Year-over-year 10%
Bigger than the same period last year?
yoy = (sum of the last W months) ÷ (sum of the same W months a year ago)
measured only when the prior-year sum ≥ 60
Why it is here
AUC 0.703, and it cancels seasonality for free. A summer product rises every July, so period-over-period calls it a breakout every year while year-over-year calls it ordinary.
Watch out
Not measurable without a year of prior history, which is common for new keywords. Those drop the component from their weights.
Persistence 10%
One month's spike, or several months of holding?
persistence = months of the last 6 above the 12-month median (0 to 6)
Why it is here
AUC 0.686, higher than the growth rate it partly replaces. Simple and insensitive to outliers, which is exactly what separates a one-month spike from a rise that has settled in.
Watch out
A keyword that plateaued at a high level raises its own median and scores low. The component is biased against mature demand.
Diffusion 10%
Is the name itself spreading?
variants = other queries within 22% edit distance
diffusion = ( max(variant breakout) + (1 + share of neighbours above 1.2) ) ÷ number of measured terms
Why it is here
When a name enters public vocabulary its misspellings arrive with it and rise together. In the back-test three spellings of one new car's name took off in the same month, and so did a stock index name and its common misspelling. Where variants exist the signal is AUC 0.640.
Watch out
Sparse: only about a quarter of a pool has any variant. For the rest the component is dropped from the weights rather than guessed.
3. Why rank percentiles instead of raw values
The five components have five different units. Growth can run from −1 to +50, affinity usually sits between 0.3 and 5, momentum between −0.3 and 0.3, early signal between 0 and 1. A weighted sum of the raw values lets growth swallow the other four.
Search data is long-tailed, so a mean and standard deviation normalisation is not safe either: one outlier inflates the standard deviation and flattens everything else toward zero.
So each component becomes a rank percentile within this run. Keywords that have a value are sorted ascending and spread evenly from 0 to 1. Scale-invariant and insensitive to outliers.
The cost is real: scores from different runs are not comparable. 85 in one run does not mean 85 in another. To track something over time, read the segment monthly demand and the raw growth rate, not the score.
4. What happens when a component cannot be measured
Components go missing. The previous window can fall under the floor, and journey expansion is not measured at all in the list view. A missing component is never filled with a median or a zero. For that keyword the weight is removed and the rest renormalised.
Score = 100 × Σ(wᵢ × pᵢ) ÷ Σ(measured wᵢ)
journey expansion (15) missing → denominator 0.85
journey and growth (30) missing → denominator 0.55
Each card records which components were missing and the list says so at the top. Filling a gap with zero would make 'not measured' indistinguishable from 'measured and bad'.
5. A worked example
Open a finished run and return to this page to see the top keyword of that run decomposed with real numbers.
6. What this score does not tell you
- It is not a per-segment growth rateThe gender and age split is a marginal distribution from a current snapshot, with no time series. Growth is computed on total volume and then carries the current split to express segment size. Growth 'among women in their 20s' was never measured separately.
- A cross segment is an estimateThe API returns a gender split and an age split separately. The share for women in their 20s is the product of the two, a [derived] value assuming independence. It is not a measured cross panel.
- It is a rank, not a sizeA keyword at 90 is not bigger than one at 60. For absolute size, read the segment monthly demand.
- It says nothing about revenueOnly the change in search demand is observed. Whether that demand converts, or earns margin, is not in this data.
- Outside Korea there is no affinityGender and age splits exist only in the Korean dataset. Japan and US runs cover the whole market and affinity drops out of the weights.
7. Where the weights come from - the back-test
These weights are a measurement, not a hypothesis. In September 2026, 3,099 keywords were collected across seven domains - beauty, automotive, pharmaceuticals, supplements, fashion, stocks and celebrities - and their 48-month curves pulled. 432 of them actually took off and 2,765 did not, decided from the data: a three-month mean crossing 3x the trailing twelve-month median, still 2x three months later, reaching at least 1,000 searches a month.
The prediction point is fixed at three months before the take-off. Every signal is computed from data up to that month only, so nothing leaks backwards.
The previous composition (growth 30, momentum 20, acceleration, small base) scored AUC 0.528. Indistinguishable from a coin flip. Of its top 24, 8.3% actually took off, below the 14.8% you get by picking at random.
This composition scores 0.726. 70.8% of its top 24 actually took off, 4.8x the base rate, and 80% of its top 10.
Single-signal AUC: breakout 0.736, volatility 0.709, year-over-year 0.703, persistence 0.686, 12-month momentum 0.662, 6-month growth 0.660, latest-month z 0.655, spelling variants 0.640, 3-month growth 0.618, 6-month momentum 0.613, acceleration 0.512, journey expansion 0.493.
Two components were removed. Acceleration was noise at 0.512. Journey expansion was tested properly: search paths for 18 take-offs and 18 controls, read at both the current month and twelve months earlier, at a cost of 113,000 credits. It scored 0.493. Two reasons: path_finder's limit saturates the node count around 20 to 30 so it never reflects the real network size, and even allowing for that, the expansion of the two groups was not distinguishable. Journey moved out of the score and stayed in the drill-down as explanation.
SERP signals were checked too. AI Overview present 0.543, People Also Ask 0.468, knowledge panel 0.467, related-search block 0.423, ad competition 0.468. Going into the content rather than the flags, related-query count reached 0.631 and vocabulary novelty 0.590, still short of the volume-shape signals. The deeper limit is that the API serves the SERP as a current snapshot only, so no past-date test is possible. The SERP bonus was removed from the early signal, and the next task is to start logging SERP snapshots monthly so the question can be answered properly in twelve months.
What remains open: 132 of the 432 take-offs are stocks, and most of those come from one event, the 2025-2026 KOSPI rise. Split by domain, breakout held everywhere it could be tested, but pharmaceuticals had only five cases and is not validated.
How the 6-month outlook is made
It does not predict a search count. Testing 3,340 Korean search curves from many past months, neither stretching the trend nor using the same month last year beat "last month carries on". Instead it counts what actually happened over the next six months to past rises with the same direction over their last three months and the same seasonal status.
- Who gets an outlookOnly things that rose more than 1.3x over a 3, 6 or 12-month window against the median of the 12 months before it, with a last-three-month average of at least 50 searches a month.
- ClimbingVolume rose more than 15% over the last three months and the last month is at least the one before.
- CoolingVolume fell more than 15% over the last three months, or the last month is more than 15% below the one before.
- SteadyIn between.
- SeasonalThe same three months last year were at least 1.3x the median of the nine months before them, or every search carries a year (born again under a new name each year).
| Stage · season | Cases | Rose further | Held 80%+ | Fell over 40% | 6-month avg / today (10-90%) | Check: inside range |
|---|
| Climbing · not seasonal | 4,968 | 69% | 84% | 7% | 0.68~5.09 (1.32) | 78% |
| Climbing · seasonal | 3,377 | 58% | 74% | 13% | 0.53~2.96 (1.11) | 71% |
| Steady · not seasonal | 3,150 | 57% | 82% | 6% | 0.69~2.30 (1.06) | 75% |
| Steady · seasonal | 2,344 | 48% | 73% | 11% | 0.57~1.94 (0.98) | 71% |
| Cooling · not seasonal | 6,351 | 44% | 62% | 19% | 0.45~2.51 (0.93) | 78% |
| Cooling · seasonal | 5,221 | 34% | 49% | 34% | 0.23~1.87 (0.79) | 75% |
The ranges were set on the earlier months (origins 24 to 33) and checked on the later ones (34 to 42). The last column is how often the outcome fell inside the 80% range.
Track record
Every run's outlook is written down. When the six months after it are in the data, the same searches are measured again and scored. The same thing forecast from the same data month in several runs counts once.
2,146 forecasts recorded, none scored yet. The first can be scored once data for 2027-02 is in.
Limits
- The table was fitted on a Korean sample (the 2026-09 study set). Japan and the US use the same table until their own track record allows a refit.
- The same keyword is counted at several months, so the case count is larger than the number of independent samples.
- A spike caused by a broadcast or a news event cannot be told apart from the curve alone.
- The ranges are wide. That is why no single forecast value is shown.
8. How to read it in practice
- ① What's trendingCombined Trend Score rank. The starting point when you do not know where to look.
- ② Who over-indexesAffinity alone. For messaging and product work that needs target specificity.
- ③ What's emergingEarly signal alone. For getting there first. Absolute volumes are small, so read direction, not size.
The three tabs exist because one combined score cannot separate these three questions. A weighted sum always pulls toward the middle: a keyword with 5× affinity but ordinary growth disappears into the middle of the combined ranking.