Bullseye Funnel (5 Layers)

Language English Español Português العربية Русский 中文

This page answers:Which layer does this content's data break in?

Platform you posted on (can be left blank)
Content title (can be left blank)
Entry layer · CTR (proportion: 0.05 = 5%)
Entry layer · impression growth rate (proportion)
Reception layer · completion rate (proportion)
Reception layer · dwell-time share (proportion)
Interaction layer · save rate (proportion)
Interaction layer · comment rate (proportion)
Interaction layer · like rate (proportion)
Conversion layer · DM enquiry rate (proportion)
Conversion layer · group-join rate (proportion)
Conversion layer · follow rate (proportion)
Spread layer · repost rate (proportion)
Spread layer · viral ratio (proportion)

How to read this chart: the 5 layers run top to bottom as entry → reception → interaction → conversion → spread, and you read the order of the colours: the first layer that turns red/yellow means the break is between it and the layer above it.
A break is judged on one combination only: upper layer 🟢 and lower layer 🟡 or 🔴 → out comes one diagnosis plus one prescription (the source code has only these 4 rules; they are not rules added here).
When the upper layer is not 🟢 the source code does not judge a break; and when a layer is all “no data” it is not judged as a break either.
Unit warning: the thresholds are proportions, 0.05 = 5%. Filling in 5 will be judged 🟢 over the line —— the source code compares the value straight against the threshold, with no percentage conversion.

Porting scope (source: /opt/algorithms/functional/funnel_evaluate.py, 133 lines, sha256 353f0369…)
· Aligned: LAYERS — the 5 layers × 12 metrics and all the green/yellow thresholds (L19-57); the colour judgement ≥green 🟢超线 / ≥yellow 🟡偏线 / 否则 🔴迷路 (L88-93); missing data is recorded as “no data” and does not count towards that layer's colour (L85-87); the layer colour takes the worst metric in that layer (🔴 if there is one, otherwise 🟡 if there is one, 🟢 only if all are green, and ⏳ no data only if nothing was filled in) (L97-104); the break condition and the 4 prescriptions (FAULT_DIAG L59-64 and L119-126).
· Equivalent but looks different: the source code reads the data with data.get(指标名, data.get(指标名.replace(' ', '_'))), and none of the 12 metric names contains a space, so that fallback is a no-op —— this page reads straight by key name.
· Not aligned ①: all 4 pairs of adjacent layers are in FAULT_DIAG in the source code, so the L121 fallback ('未知断层', '综合优化') is never actually reached; this page keeps that fallback and flags it here.
· Not aligned ②: if the data the source code gets from the API contains strings, the comparison at L88 raises a TypeError; this page forces a number conversion at the input layer and errors out on anything non-numeric (the source code has no such conversion).
· Not aligned ③: the source code's layers is a dict (order = definition order); this page outputs it as an array in the same order, field for field; the data_bus write (L132) and the info metadata attribute are not ported (a pure front-end has no bus, and the page does not need them).
· No extensions: the source code judges only the 4 pairs of breaks between adjacent layers out of the 5. Cross-layer collapses like “entry 🟢, conversion 🔴, layers in between not green” the source code does not judge —— this page copies it without extending.
· Why the two items under “next step” are set by hand: the types this page produces are layer_verdict / fault_diagnosis, and none of the 4 existing slices consumes these two types, so build.py's automatic wiring cannot draw edges (it is not a broken link, it is types that do not connect). The two below are hand-set business downstreams:
 ① → network effect: the funnel tells you which layer the content breaks in, and network effect tells you how far user scale is from the critical point;
 ② → scale conversion: this page is a single-period snapshot and cannot show a trend. If you have historical multi-period data, first lay each period's metrics out on a 0~10 scale, align them with the engine's ±10 scale using “scale conversion”, then go into “curve diagnosis” to see the movement —— this page does not do that conversion.

[Evidence section · where to check every number]
① Source: the algorithm-port machine /opt/algorithms/functional/funnel_evaluate.py (133 lines, read-only): the 5 layers × 12 metrics and all the green/yellow thresholds LAYERS = lines 19-57; the break prescriptions FAULT_DIAG = lines 59-64; run() = lines 74-133; the colour judgement raw_val >= ind["green"] = lines 88-93; the layer colour takes the worst in that layer = lines 97-104; the break condition and the join = lines 119-126.
② Three categories
· [Verifiable] The 12 green/yellow thresholds, the three-tier colour judgement, missing data recorded as “no data” and excluded from the layer colour, the layer colour taken from the worst metric, the break judged only as “upper layer 🟢 and lower layer 🟡/🔴”, and the 4 prescriptions —— all checkable line by line.
· [This page's display convention] The 5 layer colour blocks and the order text are page layout; “the thresholds are proportions, 0.05 = 5%” is a warning that the source code “compares the value straight against the threshold, with no percentage conversion”. This is not source-code output — the source code has no unit note.
· [No source found] The 12 thresholds (CTR 5%, completion rate 60%, save rate 5%…) have no data source or literature citation noted in the source code —— the thresholds themselves have no source found (that is how the provider handed them over).
③ How to check it yourself: fill in only the entry layer's CTR 0.05 and leave the rest blank → the entry layer should be 🟢 and the rest ⏳ no data, with 0 breaks; then keep the entry layer's CTR at 0.05 and put the reception layer's completion rate at 0.10 (below the yellow line of 0.30) → one entry→reception break should come out, with the prescription “title promise = content delivery”.

What you can do next

Network Effect

Compute network value from the size of your network, and show how far you are from the critical point

Why this link: Follow-on picked by hand (network-effect)

Scale Mapper

Convert between 0–10 scores and the engine's −10 to +10 scale, both directions

Why this link: Follow-on picked by hand (score-map)
Generated by /opt/slices_build/build.py from the spec /_shared/slices/funnel-evaluate.json — to change this page, edit the spec and re-run the generator; never hand-edit the HTML.