GKP-GSC shape-mismatch refresh signal¶
Fifth and most-conditional of the refresh signals. Fires only when GKP exists, GT is missing, and GKP's shape disagrees with GSC's shape (Pearson correlation < 0.7) — requesting GT becomes worthwhile to break the tie.
What it is¶
Signal name: "shape_mismatch". Adds a flat 1.5 to gt_components (no GKP contribution — the signal exists to call GT in as a tiebreaker).
The signal is gated on three conditions that must all hold:
with_gkp_data— GKP is presentnot with_gt_data— GT is absentlen(gkp_trend_array) >= 3— enough GKP history to correlateare_trends_close(gkp, gsc) is False— shape correlation < 0.7
How it's computed¶
At processing.py:KB-ANCHOR:refresh-signal-shape-mismatch. The correlation check delegates to are_trends_close(gkp_trend_array, gkp_month_array, impressions_array, month_array) which computes Pearson correlation across overlapping months and returns true if it's ≥ 0.7.
Why this choice¶
0.7 is the textbook "strong correlation" threshold. Below it, the two sources are telling different stories about the keyword's shape. With GT present, the conflict would resolve in the blend itself; with GT absent, the blend is effectively GKP × constant + raw GSC, and we have no way to know which source to trust.
Calling GT in is cheap relative to the value of resolving the conflict: GT will either confirm GKP (in which case GSC was misleading — maybe a bot incursion) or confirm GSC (in which case GKP was stale or wrong on this keyword). Either outcome unblocks the blend.
The flat 1.5 contribution (rather than a continuous correlation-strength score) reflects that this signal is a tiebreaker request, not an urgency claim — it just needs to be enough to put the keyword in the queue. Bigger signals (surge, divergence) drive tier assignment.
Edge cases¶
- GT already present — the signal cannot fire. If GKP and GSC disagree and GT exists, the blend's normal logic (gt-gsc-correlation-gate, Sub-batch 3d) handles the disagreement.
- GKP shape is volatile but matches GSC —
are_trends_closereturns true; signal doesn't fire. Volatility itself isn't the issue, only shape disagreement. - Very short GKP history (1–2 months) — Pearson is meaningless on so few points; the
len >= 3guard prevents firing.
See also¶
- GT/GKP staleness and missing-source — the other "GT-needed" signals
- GT/GSC correlation gate (Sub-batch 3d) — the blending-time decision that uses the same shape-agreement concept
- Archive:
_archive/refresh_detection.md