{"id":12954,"date":"2026-08-28T12:52:11","date_gmt":"2026-08-28T10:52:11","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/ga4-thresholding-modelling-checker\/"},"modified":"2026-08-28T12:52:11","modified_gmt":"2026-08-28T10:52:11","slug":"ga4-thresholding-modelling-checker","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/","title":{"rendered":"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">\u00dcber modellierte Daten entscheiden zwei Zahlen, und sie ziehen in entgegengesetzte Richtungen: die eine z\u00e4hlt t\u00e4gliche Nutzer mit erlaubtem Speicher, die andere t\u00e4gliche Ereignisse mit verweigertem. Eine h\u00f6here Zustimmungsrate hilft der ersten und schadet der zweiten &#8211; deshalb hat die Modellierung eine Obergrenze und nicht nur eine Untergrenze. Dieselben Eingaben zeigen au\u00dferdem, wie viele Zeilen einer Aufschl\u00fcsselung die Schwellenwerte voraussichtlich entfernen.<\/p>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-bottom: 18px;\">\n<div>\n            <label for=\"tw-nutzer\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Nutzer je Tag, gesamt<\/label><br \/>\n            <input id=\"tw-nutzer\" type=\"number\" min=\"0\" step=\"100\" value=\"4000\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"tw-zustimmung\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Zustimmungsrate, % granted<\/label><br \/>\n            <input id=\"tw-zustimmung\" type=\"number\" min=\"0\" max=\"100\" step=\"1\" value=\"65\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"tw-ereignisse\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Ereignisse je Nutzer und Tag<\/label><br \/>\n            <input id=\"tw-ereignisse\" type=\"number\" min=\"0.1\" step=\"0.5\" value=\"12\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"tw-tage\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Berichtszeitraum, Tage<\/label><br \/>\n            <input id=\"tw-tage\" type=\"number\" min=\"1\" max=\"365\" step=\"1\" value=\"28\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"tw-kardinalitaet\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Verschiedene Werte in der Aufschl\u00fcsselung<\/label><br \/>\n            <input id=\"tw-kardinalitaet\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value=\"50\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"tw-minimum\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Angenommenes Minimum je Zeile<\/label><br \/>\n            <input id=\"tw-minimum\" type=\"number\" min=\"1\" max=\"1000\" step=\"1\" value=\"50\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\">\n        <\/div>\n<div>\n            <label for=\"tw-identitaet\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Berichtsidentit\u00e4t<\/label><br \/>\n            <select id=\"tw-identitaet\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\"><option value=\"blended\" selected>Gemischt<\/option><option value=\"beobachtet\">Beobachtet<\/option><option value=\"geraet\">Ger\u00e4tebasiert<\/option><\/select>\n        <\/div>\n<div>\n            <label for=\"tw-signals\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Google Signals<\/label><br \/>\n            <select id=\"tw-signals\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\"><option value=\"an\" selected>An<\/option><option value=\"aus\">Aus<\/option><\/select>\n        <\/div>\n<div>\n            <label for=\"tw-demografie\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Demografie- oder Interessenmerkmale<\/label><br \/>\n            <select id=\"tw-demografie\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box;\"><option value=\"ja\">Im Bericht<\/option><option value=\"nein\" selected>Nicht im Bericht<\/option><\/select>\n        <\/div>\n<\/p><\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Google ver\u00f6ffentlicht nicht, ab welcher Zeilengr\u00f6\u00dfe ein Schwellenwert greift; deshalb steht die Zahl hier als Eingabe und nicht als Konstante. F\u00fcnfzig ist eine verbreitete Arbeitsannahme, keine dokumentierte Gr\u00f6\u00dfe &#8211; die Zeilenz\u00e4hlung unten \u00fcbernimmt den eingetragenen Wert.<\/p>\n<p>    <button id=\"tw-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Berechnen<\/button><\/p>\n<div id=\"tw-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"\u00dcber modellierte Daten entscheiden zwei Zahlen, und sie ziehen in entgegengesetzte Richtungen: die eine z\u00e4hlt t\u00e4gliche Nutzer mit erlaubtem Speicher, die andere t\u00e4gliche Ereignisse mit verweigertem. Eine h\u00f6here Zustimmungsrate hilft der ersten und schadet der zweiten - deshalb hat die Modellierung eine Obergrenze und nicht nur eine Untergrenze. Dieselben Eingaben zeigen au\u00dferdem, wie viele Zeilen einer Aufschl\u00fcsselung die Schwellenwerte voraussichtlich entfernen.\",\"label_nutzer\":\"Nutzer je Tag, gesamt\",\"label_zustimmung\":\"Zustimmungsrate, % granted\",\"label_ereignisse\":\"Ereignisse je Nutzer und Tag\",\"label_tage\":\"Berichtszeitraum, Tage\",\"label_kardinalitaet\":\"Verschiedene Werte in der Aufschl\u00fcsselung\",\"label_minimum\":\"Angenommenes Minimum je Zeile\",\"label_identitaet\":\"Berichtsidentit\u00e4t\",\"label_signals\":\"Google Signals\",\"label_demografie\":\"Demografie- oder Interessenmerkmale\",\"option_blended\":\"Gemischt\",\"option_beobachtet\":\"Beobachtet\",\"option_geraet\":\"Ger\u00e4tebasiert\",\"option_an\":\"An\",\"option_aus\":\"Aus\",\"option_ja\":\"Im Bericht\",\"option_nein\":\"Nicht im Bericht\",\"minimum_erklaerung\":\"Google ver\u00f6ffentlicht nicht, ab welcher Zeilengr\u00f6\u00dfe ein Schwellenwert greift; deshalb steht die Zahl hier als Eingabe und nicht als Konstante. F\u00fcnfzig ist eine verbreitete Arbeitsannahme, keine dokumentierte Gr\u00f6\u00dfe - die Zeilenz\u00e4hlung unten \u00fcbernimmt den eingetragenen Wert.\",\"knopf\":\"Berechnen\",\"h_modellierung\":\"Verhaltensmodellierung: die beiden Bedingungen\",\"zeile_granted\":\"Nutzer je Tag, Speicher erlaubt\",\"zeile_denied\":\"Ereignisse je Tag, Speicher verweigert\",\"soll_tausend\":\"n\u00f6tig: 1.000\",\"urteil_ja\":\"Beide Bedingungen sind bei dieser Tagesmenge erf\u00fcllt.\",\"urteil_nein\":\"Nicht berechtigt: mindestens eine Bedingung bleibt darunter.\",\"h_korridor\":\"Der Korridor der Zustimmungsrate\",\"korridor_leer\":\"Bei dieser Menge erf\u00fcllt keine Zustimmungsrate beide Bedingungen. M\u00f6glich wird Modellierung ab etwa {n} Nutzern je Tag, und auch dann nur innerhalb eines Korridors.\",\"zeile_untergrenze\":\"Untergrenze, aus der Nutzerbedingung\",\"zeile_obergrenze\":\"Obergrenze, aus der Ereignisbedingung\",\"zeile_mindestnutzer\":\"Nutzer je Tag f\u00fcr \u00fcberhaupt einen Korridor\",\"h_schwellen\":\"Wie stark Schwellenwerte greifen\",\"zeile_pfad\":\"Schwellenpfad\",\"pfad_aktiv\":\"aktiv\",\"pfad_inaktiv\":\"von dieser Kombination nicht ausgel\u00f6st\",\"zeile_nutzer_zeitraum\":\"Nutzer mit Einwilligung im Zeitraum\",\"zeile_gleich\":\"Nutzer je Zeile bei Gleichverteilung\",\"zeile_unter_zipf\":\"Zeilen unter dem Minimum, langer Schwanz\",\"zeile_grenze\":\"Gr\u00f6\u00dfte Kardinalit\u00e4t, die eine Gleichverteilung noch tr\u00e4gt\",\"h_zeilen\":\"Die ersten Zeilen eines langen Schwanzes\",\"spalte_rang\":\"Rang\",\"spalte_nutzer\":\"Nutzer\",\"spalte_status\":\"Status\",\"status_weg\":\"entfernt\",\"status_da\":\"sichtbar\",\"h_hinweise\":\"Hinweise\",\"hinweis_keine_daten\":\"Ohne Nutzerzahl und Ereignisrate gibt es nichts zu rechnen; beide Felder brauchen einen Wert \u00fcber null.\",\"hinweis_korridor_leer\":\"Beide Bedingungen lassen sich bei dieser Menge nicht zugleich erf\u00fcllen. Unterhalb von etwa {n} Nutzern je Tag liegt die Untergrenze \u00fcber der Obergrenze, keine Zustimmungsrate schlie\u00dft die L\u00fccke.\",\"hinweis_zustimmung_zu_hoch\":\"Die Zustimmungsrate liegt \u00fcber der Obergrenze: es bleiben zu wenige Ablehnungen f\u00fcr 1.000 verweigerte Ereignisse am Tag. Das ist die widersinnige H\u00e4lfte - mehr Zustimmung r\u00fcckt die Modellierung weiter weg, nicht n\u00e4her.\",\"hinweis_zustimmung_zu_niedrig\":\"Die Zustimmungsrate liegt unter der Untergrenze: es bleiben zu wenige Nutzer mit Einwilligung. Die zweite Bedingung z\u00e4hlt Nutzer und nicht Ereignisse, eine hohe Ablehnquote arbeitet also gegen die Modellierung.\",\"hinweis_sieben_tage\":\"Beide Bedingungen m\u00fcssen an mindestens sieben Tagen gelten, nicht einmalig. Ein einzelner starker Tag qualifiziert keine Property, und die Berechtigung geht bei sinkender Menge wieder verloren.\",\"hinweis_schwelle_aus\":\"Mit dieser Identit\u00e4t und dieser Signals-Einstellung wird der demografische Schwellenpfad nicht ausgel\u00f6st. Kleine Nutzerzahlen k\u00f6nnen Zeilen weiterhin \u00fcber andere Pfade verbergen.\",\"hinweis_hebel_identitaet\":\"Eine ger\u00e4tebasierte Berichtsidentit\u00e4t nimmt den Google-Signals-Pfad heraus - um den Preis der ger\u00e4te\u00fcbergreifenden Zusammenf\u00fchrung, die diese Identit\u00e4t leistet.\",\"hinweis_export\":\"Zeilen, die ein Schwellenwert entfernt, fehlen; sie werden nicht zusammengefasst, tauchen in keiner (other)-Zeile auf und kommen durch einen gr\u00f6\u00dferen Zeitraum nicht zur\u00fcck. Der BigQuery-Export entsteht vor den Schwellenwerten und enth\u00e4lt sie.\",\"hinweis_minimum_unveroeffentlicht\":\"Das hier verwendete Zeilenminimum ist der oben eingetragene Wert, keine dokumentierte Konstante. Google best\u00e4tigt Schwellenwerte, ohne die Zahl zu nennen - die Zeilenz\u00e4hlung zeigt deshalb eine Gr\u00f6\u00dfenordnung und keine Vorhersage.\",\"dezimal\":\",\"};<\/p>\n<p>    \/\/ --- Rechnung ------------------------------------------------------------\n    \/\/\n    \/\/ Verhaltensmodellierung verlangt zwei Bedingungen zugleich, und sie zeigen\n    \/\/ in entgegengesetzte Richtungen: die eine zaehlt Nutzer MIT Einwilligung,\n    \/\/ die andere Ereignisse OHNE. Daraus wird kein einzelner Schwellwert,\n    \/\/ sondern ein Korridor - und unter einer Mindestnutzerzahl ist er leer.<\/p>\n<p>    var SCHWELLE_NUTZER = 1000;      \/\/ taegliche Nutzer mit analytics_storage = granted\n    var SCHWELLE_EREIGNISSE = 1000;  \/\/ taegliche Ereignisse mit analytics_storage = denied\n    var MINDESTTAGE = 7;<\/p>\n<p>    function zahl(wert, ersatz) {\n        var n = Number(wert);\n        return isFinite(n) ? n : ersatz;\n    }<\/p>\n<p>    \/** Harmonische Zahl, Anteilsnenner der Zipf-Verteilung. *\/\n    function harmonisch(n) {\n        var s = 0;\n        for (var i = 1; i <= n; i++) { s += 1 \/ i; }\n        return s;\n    }\n\n    function rechnen(e) {\n        var ein = e || {};\n        var nutzer = Math.max(0, zahl(ein.nutzer, 0));\n        var p = Math.min(1, Math.max(0, zahl(ein.zustimmung, 0) \/ 100));\n        var proNutzer = Math.max(0, zahl(ein.ereignisse, 0));\n        var tage = Math.max(1, Math.round(zahl(ein.tage, 1)));\n        var kardinalitaet = Math.max(1, Math.round(zahl(ein.kardinalitaet, 1)));\n        var minimum = Math.max(1, zahl(ein.minimum, 1));\n        var identitaet = ein.identitaet || 'blended';\n        var signals = ein.signals !== 'aus';\n        var demografie = ein.demografie === 'ja';\n\n        \/\/ --- Verhaltensmodellierung ---\n        var nutzerGranted = nutzer * p;\n        var nutzerDenied = nutzer * (1 - p);\n        var ereignisseDenied = nutzerDenied * proNutzer;\n\n        var bedingungNutzer = nutzerGranted >= SCHWELLE_NUTZER;\n        var bedingungEreignisse = ereignisseDenied >= SCHWELLE_EREIGNISSE;<\/p>\n<p>        \/\/ Korridor der Zustimmungsrate, in dem beide Bedingungen zugleich gelten.\n        var pMin = nutzer > 0 ? SCHWELLE_NUTZER \/ nutzer : Infinity;\n        var pMax = (nutzer > 0 && proNutzer > 0)\n            ? 1 - SCHWELLE_EREIGNISSE \/ (nutzer * proNutzer)\n            : -Infinity;\n        var korridorLeer = !(pMin <= pMax) || pMin > 1 || pMax < 0;\n\n        \/\/ Kleinste Nutzerzahl, bei der ueberhaupt eine Rate beide Bedingungen traegt.\n        var nutzerMinimum = proNutzer > 0\n            ? SCHWELLE_NUTZER * (1 + 1 \/ proNutzer)\n            : Infinity;<\/p>\n<p>        var modellierung = bedingungNutzer && bedingungEreignisse;<\/p>\n<p>        \/\/ --- Schwellenwerte im Bericht ---\n        \/\/ Der demografische Pfad haengt an Google Signals und der Identitaet;\n        \/\/ geraetebasiert liest keine Signals-Daten und loest ihn daher nicht aus.\n        var signalsPfad = signals && identitaet !== 'geraet';\n        var schwellenAktiv = signalsPfad || demografie;<\/p>\n<p>        var nutzerZeitraum = nutzerGranted * tage;\n        var gleichJeZeile = nutzerZeitraum \/ kardinalitaet;<\/p>\n<p>        \/\/ Langer Schwanz nach Zipf: Anteil der Zeile r ist (1\/r) durch H(n).\n        var H = harmonisch(kardinalitaet);\n        var zeilen = [];\n        var unterMinimumZipf = 0;\n        for (var r = 1; r <= kardinalitaet; r++) {\n            var n = nutzerZeitraum * (1 \/ r) \/ H;\n            if (n < minimum) { unterMinimumZipf++; }\n            if (zeilen.length < 8) { zeilen.push({ rang: r, nutzer: n, unten: n < minimum }); }\n        }\n        var unterMinimumGleich = gleichJeZeile < minimum ? kardinalitaet : 0;\n\n        \/\/ Groesste Kardinalitaet, bei der die Gleichverteilung noch traegt.\n        var kardinalitaetGrenze = Math.floor(nutzerZeitraum \/ minimum);\n\n        var hinweise = [];\n        if (nutzer <= 0 || proNutzer <= 0) { hinweise.push('keine_daten'); }\n        if (korridorLeer &#038;&#038; nutzer > 0 && proNutzer > 0) { hinweise.push('korridor_leer'); }\n        if (!korridorLeer && p > pMax) { hinweise.push('zustimmung_zu_hoch'); }\n        if (!korridorLeer && p < pMin) { hinweise.push('zustimmung_zu_niedrig'); }\n        if (modellierung) { hinweise.push('sieben_tage'); }\n        if (!schwellenAktiv) { hinweise.push('schwelle_aus'); }\n        if (schwellenAktiv &#038;&#038; signalsPfad &#038;&#038; !demografie) { hinweise.push('hebel_identitaet'); }\n        if (unterMinimumZipf > 0) { hinweise.push('export'); }\n        hinweise.push('minimum_unveroeffentlicht');<\/p>\n<p>        return {\n            nutzerGranted: nutzerGranted,\n            nutzerDenied: nutzerDenied,\n            ereignisseDenied: ereignisseDenied,\n            bedingungNutzer: bedingungNutzer,\n            bedingungEreignisse: bedingungEreignisse,\n            modellierung: modellierung,\n            pMin: pMin,\n            pMax: pMax,\n            korridorLeer: korridorLeer,\n            nutzerMinimum: nutzerMinimum,\n            signalsPfad: signalsPfad,\n            schwellenAktiv: schwellenAktiv,\n            nutzerZeitraum: nutzerZeitraum,\n            gleichJeZeile: gleichJeZeile,\n            unterMinimumGleich: unterMinimumGleich,\n            unterMinimumZipf: unterMinimumZipf,\n            kardinalitaet: kardinalitaet,\n            kardinalitaetGrenze: kardinalitaetGrenze,\n            zeilen: zeilen,\n            hinweise: hinweise\n        };\n    }<\/p>\n<p>    \/\/ --- Pruefpunkt ----------------------------------------------------------\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.TW = {\n        rechnen: rechnen,\n        harmonisch: harmonisch,\n        T: T,\n        SCHWELLE_NUTZER: SCHWELLE_NUTZER,\n        SCHWELLE_EREIGNISSE: SCHWELLE_EREIGNISSE,\n        MINDESTTAGE: MINDESTTAGE\n    };<\/p>\n<p>    \/\/ --- Oberflaeche ---------------------------------------------------------<\/p>\n<p>    var btn = document.getElementById('tw-btn');\n    var out = document.getElementById('tw-ausgabe');\n    if (!btn || !out) { return; }<\/p>\n<p>    function el(tag, stil, text) {\n        var e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n    function komma(n, stellen) {\n        if (!isFinite(n)) { return '-'; }\n        return Number(n).toFixed(stellen === undefined ? 0 : stellen).replace('.', T.dezimal);\n    }\n    function prozent(anteil) {\n        if (!isFinite(anteil)) { return '-'; }\n        return komma(Math.min(100, Math.max(0, anteil * 100)), 1) + ' %';\n    }<\/p>\n<p>    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.92rem; margin: 18px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace;';\n    var GUT = ' color: #7ee787;';\n    var SCHLECHT = ' color: #ffa94d;';<\/p>\n<p>    btn.addEventListener('click', function () {\n        var erg = rechnen({\n            nutzer: wert('tw-nutzer'),\n            zustimmung: wert('tw-zustimmung'),\n            ereignisse: wert('tw-ereignisse'),\n            tage: wert('tw-tage'),\n            kardinalitaet: wert('tw-kardinalitaet'),\n            minimum: wert('tw-minimum'),\n            identitaet: wert('tw-identitaet'),\n            signals: wert('tw-signals'),\n            demografie: wert('tw-demografie')\n        });<\/p>\n<p>        out.innerHTML = '';<\/p>\n<p>        \/\/ --- Verhaltensmodellierung ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_modellierung));\n        var m = el('div', 'display: grid; grid-template-columns: auto auto auto; gap: 0 18px; align-items: baseline;');\n        function mzeile(name, ist, soll, ok) {\n            m.appendChild(el('div', ZELLE, name));\n            m.appendChild(el('div', ZELLE_WERT + (ok ? GUT : SCHLECHT), ist));\n            m.appendChild(el('div', ZELLE, soll));\n        }\n        mzeile(T.zeile_granted, komma(erg.nutzerGranted), T.soll_tausend, erg.bedingungNutzer);\n        mzeile(T.zeile_denied, komma(erg.ereignisseDenied), T.soll_tausend, erg.bedingungEreignisse);\n        out.appendChild(m);<\/p>\n<p>        out.appendChild(el('div', 'margin: 10px 0 0; font-size: 0.9rem; font-weight: 700;' + (erg.modellierung ? GUT : SCHLECHT),\n            erg.modellierung ? T.urteil_ja : T.urteil_nein));<\/p>\n<p>        \/\/ --- Korridor ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_korridor));\n        if (erg.korridorLeer) {\n            out.appendChild(el('p', ZELLE + ' margin: 0;', T.korridor_leer.replace('{n}', komma(erg.nutzerMinimum))));\n        } else {\n            var k = el('div', 'display: grid; grid-template-columns: auto auto; gap: 0 18px; align-items: baseline;');\n            k.appendChild(el('div', ZELLE, T.zeile_untergrenze));\n            k.appendChild(el('div', ZELLE_WERT, prozent(erg.pMin)));\n            k.appendChild(el('div', ZELLE, T.zeile_obergrenze));\n            k.appendChild(el('div', ZELLE_WERT, prozent(erg.pMax)));\n            k.appendChild(el('div', ZELLE, T.zeile_mindestnutzer));\n            k.appendChild(el('div', ZELLE_WERT, komma(erg.nutzerMinimum)));\n            out.appendChild(k);\n        }<\/p>\n<p>        \/\/ --- Schwellenwerte ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_schwellen));\n        var s = el('div', 'display: grid; grid-template-columns: auto auto; gap: 0 18px; align-items: baseline;');\n        s.appendChild(el('div', ZELLE, T.zeile_pfad));\n        s.appendChild(el('div', ZELLE_WERT + (erg.schwellenAktiv ? SCHLECHT : GUT), erg.schwellenAktiv ? T.pfad_aktiv : T.pfad_inaktiv));\n        s.appendChild(el('div', ZELLE, T.zeile_nutzer_zeitraum));\n        s.appendChild(el('div', ZELLE_WERT, komma(erg.nutzerZeitraum)));\n        s.appendChild(el('div', ZELLE, T.zeile_gleich));\n        s.appendChild(el('div', ZELLE_WERT + (erg.gleichJeZeile < minimumAnzeige() ? SCHLECHT : ''), komma(erg.gleichJeZeile, 1)));\n        s.appendChild(el('div', ZELLE, T.zeile_unter_zipf));\n        s.appendChild(el('div', ZELLE_WERT + (erg.unterMinimumZipf > 0 ? SCHLECHT : GUT), komma(erg.unterMinimumZipf) + ' \/ ' + komma(erg.kardinalitaet)));\n        s.appendChild(el('div', ZELLE, T.zeile_grenze));\n        s.appendChild(el('div', ZELLE_WERT, komma(erg.kardinalitaetGrenze)));\n        out.appendChild(s);<\/p>\n<p>        \/\/ --- Zeilen im langen Schwanz ---\n        out.appendChild(el('div', UEBERSCHRIFT, T.h_zeilen));\n        var z = el('div', 'display: grid; grid-template-columns: auto auto auto; gap: 0 18px; align-items: baseline;');\n        z.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_rang));\n        z.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_nutzer));\n        z.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', T.spalte_status));\n        erg.zeilen.forEach(function (r) {\n            z.appendChild(el('div', ZELLE_WERT, komma(r.rang)));\n            z.appendChild(el('div', ZELLE_WERT + (r.unten ? SCHLECHT : ''), komma(r.nutzer, 1)));\n            z.appendChild(el('div', ZELLE + (r.unten ? SCHLECHT : GUT), r.unten ? T.status_weg : T.status_da));\n        });\n        out.appendChild(z);<\/p>\n<p>        if (erg.hinweise.length) {\n            out.appendChild(el('div', UEBERSCHRIFT, T.h_hinweise));\n            var liste = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n            erg.hinweise.forEach(function (h) {\n                var text = T['hinweis_' + h];\n                if (text) { liste.appendChild(el('li', '', text.replace('{n}', komma(erg.nutzerMinimum)))); }\n            });\n            out.appendChild(liste);\n        }\n    });<\/p>\n<p>    \/** Angenommenes Zeilenminimum aus dem Feld, fuer die Einfaerbung. *\/\n    function minimumAnzeige() {\n        return Math.max(1, zahl(wert('tw-minimum'), 1));\n    }\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Verhaltensmodellierung braucht Nutzer mit und Ereignisse ohne Einwilligung zugleich, liegt also in einem Korridor der Zustimmungsrate statt \u00fcber einem einzelnen Schwellwert. Das rechnet diesen Korridor aus &#8211; und wie viel vom langen Schwanz eines Berichts die Schwellenwerte entfernen.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92142,92088,92091],"class_list":["post-12954","page","type-page","status-publish","hentry","tag-consent-mode-v2-de","tag-data-quality-de","tag-google-analytics-4-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Verhaltensmodellierung braucht Nutzer mit und Ereignisse ohne Einwilligung zugleich, liegt also in einem Korridor der Zustimmungsrate statt \u00fcber einem einzelnen Schwellwert. Das rechnet diesen Korridor aus - und wie viel vom langen Schwanz eines Berichts die Schwellenwerte entfernen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-thresholding-modelling-checker\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-thresholding-modelling-checker\\\/\",\"name\":\"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-28T10:52:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-thresholding-modelling-checker\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-thresholding-modelling-checker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/ga4-thresholding-modelling-checker\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/","og_locale":"en_US","og_type":"article","og_title":"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung - Lukas Wojcik - Blog","og_description":"Verhaltensmodellierung braucht Nutzer mit und Ereignisse ohne Einwilligung zugleich, liegt also in einem Korridor der Zustimmungsrate statt \u00fcber einem einzelnen Schwellwert. Das rechnet diesen Korridor aus - und wie viel vom langen Schwanz eines Berichts die Schwellenwerte entfernen.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/","name":"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-28T10:52:11+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/ga4-thresholding-modelling-checker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"Pr\u00fcfer f\u00fcr GA4-Schwellenwerte und Verhaltensmodellierung"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/12954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=12954"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/12954\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=12954"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=12954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}