Page MenuHomePhabricator

diagnose_missing_mentors.html

Authored By
Bobocicada
Jun 10 2026, 2:49 AM
Size
290 KB
Referenced Files
None
Subscribers
None

diagnose_missing_mentors.html

This file is larger than 256 KB, so syntax highlighting was skipped.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jupyter Notebook — generated with runcell</title>
<meta name="description" content="Exported with runcell — convert .ipynb notebooks to HTML or PDF anytime at runcell.dev." />
<meta name="generator" content="runcell" />
<style>
:root {
--jp-code-font-family: 'SFMono-Regular', Menlo, Consolas, 'Liberation Mono', monospace;
--jp-content-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
--jp-cell-prompt-width: 64px;
--jp-input-prompt-color: #307fc1;
--jp-output-prompt-color: #bf5b3d;
--jp-cell-input-bg: #f7f7f7;
--jp-layout-color0: #ffffff;
--jp-layout-color1: #f7f7f7;
--jp-border-color1: #e0e0e0;
--jp-content-font-color0: #000000;
--jp-content-font-color1: #333333;
}
* {
box-sizing: border-box;
}
body {
font-family: var(--jp-content-font-family);
font-size: 14px;
line-height: 1.5;
color: var(--jp-content-font-color0);
background-color: var(--jp-layout-color0);
margin: 0;
padding: 0;
}
.notebook-container {
max-width: 900px;
margin: 0 auto;
padding: 20px;
}
/* Cell structure */
.cell {
display: flex;
flex-direction: row;
margin-bottom: 12px;
position: relative;
}
.cell-prompt {
min-width: var(--jp-cell-prompt-width);
width: var(--jp-cell-prompt-width);
font-family: var(--jp-code-font-family);
font-size: 12px;
padding: 10px 8px 10px 0;
text-align: right;
flex-shrink: 0;
user-select: none;
}
.cell-content {
flex: 1;
min-width: 0;
overflow: hidden;
}
/* Input prompt styling - Jupyter blue */
.input-prompt {
color: var(--jp-input-prompt-color);
font-weight: bold;
}
/* Output prompt styling - Jupyter red/orange */
.output-prompt {
color: var(--jp-output-prompt-color);
font-weight: bold;
}
/* Code cell input area */
.input-area {
background-color: var(--jp-cell-input-bg);
border: 1px solid var(--jp-border-color1);
border-radius: 2px;
padding: 8px 12px;
overflow-x: auto;
}
.input-area pre {
margin: 0;
font-family: var(--jp-code-font-family);
font-size: 13px;
line-height: 1.4;
white-space: pre-wrap;
word-wrap: break-word;
}
/* Output area */
.output-area {
margin-top: 0;
}
.output-wrapper {
display: flex;
flex-direction: row;
margin-top: 4px;
}
.output-content {
flex: 1;
min-width: 0;
padding: 8px 0;
}
.output-content pre {
margin: 0;
font-family: var(--jp-code-font-family);
font-size: 13px;
line-height: 1.4;
white-space: pre-wrap;
word-wrap: break-word;
}
/* Stream output (stdout/stderr) */
.output-stream {
font-family: var(--jp-code-font-family);
font-size: 13px;
line-height: 1.4;
white-space: pre-wrap;
word-wrap: break-word;
}
.output-stderr {
background-color: #fdd;
padding: 8px 12px;
border-radius: 2px;
}
/* Execute result / display data */
.output-result {
padding: 4px 0;
}
.output-result pre {
margin: 0;
font-family: var(--jp-code-font-family);
font-size: 13px;
}
/* Image output */
.output-image {
max-width: 100%;
height: auto;
display: block;
}
/* HTML output (DataFrames, etc.) */
.output-html {
overflow-x: auto;
}
.output-html table {
border-collapse: collapse;
font-size: 13px;
font-family: var(--jp-content-font-family);
}
.output-html table th,
.output-html table td {
border: 1px solid #ddd;
padding: 6px 10px;
text-align: left;
}
.output-html table th {
background-color: #f5f5f5;
font-weight: 600;
}
.output-html table tr:nth-child(even) {
background-color: #fafafa;
}
/* Error output */
.output-error {
background-color: #fff0f0;
padding: 8px 12px;
border-radius: 2px;
font-family: var(--jp-code-font-family);
font-size: 13px;
white-space: pre-wrap;
}
/* Markdown cell styling */
.markdown-cell {
padding: 10px 0;
}
.markdown-cell h1 {
font-size: 2em;
font-weight: 600;
margin: 0.67em 0;
padding-bottom: 0.3em;
border-bottom: 1px solid var(--jp-border-color1);
}
.markdown-cell h2 {
font-size: 1.5em;
font-weight: 600;
margin: 0.83em 0;
padding-bottom: 0.3em;
border-bottom: 1px solid var(--jp-border-color1);
}
.markdown-cell h3 {
font-size: 1.25em;
font-weight: 600;
margin: 1em 0;
}
.markdown-cell h4 {
font-size: 1em;
font-weight: 600;
margin: 1.33em 0;
}
.markdown-cell h5 {
font-size: 0.875em;
font-weight: 600;
margin: 1.67em 0;
}
.markdown-cell h6 {
font-size: 0.85em;
font-weight: 600;
margin: 2.33em 0;
color: #6a737d;
}
.markdown-cell p {
margin: 0 0 16px 0;
line-height: 1.6;
}
.markdown-cell code {
font-family: var(--jp-code-font-family);
font-size: 85%;
background-color: rgba(27, 31, 35, 0.05);
padding: 0.2em 0.4em;
border-radius: 3px;
}
.markdown-cell pre {
background-color: var(--jp-cell-input-bg);
border: 1px solid var(--jp-border-color1);
border-radius: 3px;
padding: 16px;
overflow-x: auto;
font-size: 85%;
line-height: 1.45;
}
.markdown-cell pre code {
background-color: transparent;
padding: 0;
border-radius: 0;
font-size: 100%;
}
.markdown-cell blockquote {
margin: 0 0 16px 0;
padding: 0 1em;
color: #6a737d;
border-left: 4px solid #dfe2e5;
}
.markdown-cell ul,
.markdown-cell ol {
margin: 0 0 16px 0;
padding-left: 2em;
}
.markdown-cell li {
margin: 0.25em 0;
}
.markdown-cell a {
color: #0366d6;
text-decoration: none;
}
.markdown-cell a:hover {
text-decoration: underline;
}
.markdown-cell hr {
border: 0;
border-top: 1px solid var(--jp-border-color1);
margin: 24px 0;
}
.markdown-cell img {
max-width: 100%;
height: auto;
}
.markdown-cell table {
border-collapse: collapse;
margin: 0 0 16px 0;
}
.markdown-cell table th,
.markdown-cell table td {
border: 1px solid #dfe2e5;
padding: 6px 13px;
}
.markdown-cell table th {
font-weight: 600;
background-color: #f6f8fa;
}
.markdown-cell table tr:nth-child(2n) {
background-color: #f6f8fa;
}
/* Raw cell styling */
.raw-cell {
background-color: var(--jp-layout-color1);
border: 1px solid var(--jp-border-color1);
border-radius: 2px;
padding: 8px 12px;
font-family: var(--jp-code-font-family);
font-size: 13px;
white-space: pre-wrap;
}
/* Empty prompt placeholder */
.prompt-empty {
color: transparent;
}
.export-footer {
margin-top: 32px;
padding-top: 16px;
border-top: 1px solid var(--jp-border-color1);
color: #555;
font-size: 13px;
text-align: center;
}
.export-footer a {
color: #0366d6;
text-decoration: none;
}
.export-footer a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="notebook-container">
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h1>checking which cohort users have no mentor on record</h1><br><br>wikipedia has a feature where new users can get assigned a mentor (an experienced editor) at sign-up. the assignment happens server-side and is stored in a database table called <code>growthexperiments_mentor_mentee</code>. importantly, the backend assigns a mentor <strong>regardless of whether the user has the mentor ui module turned on</strong> — <code>mentorshipState</code> controls only whether the ui shows, not whether the backend writes the row. so every user in the cohort should have a row in the table.<br><br>for some users there's no row at all. i want to figure out who they are, why the records are missing, and whether the rate of missing records changes over time.<br><br>three sources of truth used below:<br><br>1. <strong><code>inputs/z_mentorship_state.tsv</code></strong> — for every user, what value their <code>mentorshipState</code> user property carries. this is the <strong>updated</strong> version (2026-06-08+) of wikipedia's official released file (<code>dataset.tsv</code> from <code>https://analytics.wikimedia.org/published/datasets/one-off/growth/growthexperiments-mentorship-enabled-T420387/</code>), renamed locally. columns: <code>userId</code>, <code>mentorshipState</code>. the column now carries three raw values instead of the original two-way enabled/disabled split:<br> - <code>unset</code> — the property was never written for this user (ui defaults to on if everything else is in place)<br> - <code>'0'</code> — the user explicitly opted out<br> - <code>'50'</code> — proactive-assignment flag (a 2024-era addition; backend kicks an async job to assign a mentor)<br><br>2. <strong><code>inputs/cov_mentor_mentee_assignment_20260530.sql.gz</code></strong> — a snapshot of the actual mentor↔mentee database table, taken on 2026-05-30. downloaded from <code>https://dumps.wikimedia.org/other/growthmentorship/</code>. each row is a (mentee_id, mentor_role, mentor_id, mentee_is_active) tuple. the <code>mentor_role</code> column can take two values:<br> - <code>primary</code> — the mentor formally assigned to this mentee. by default, questions get routed here.<br> - <code>backup</code> — a fill-in mentor written by the system when the primary mentor sets themselves "away" temporarily. a mentee can have both rows simultaneously, only one, or neither.<br><br>3. <strong><code>inputs/excl_mentor_claim_log_raw.jsonl</code></strong> — every public log entry on <code>Special:Log/growthexperiments</code>, fetched directly from the mediawiki api. these record every time a mentor was reassigned (<code>action='setmentor'</code>) or proactively claimed by a new mentor (<code>action='claimmentee'</code>). using this log, the snapshot can be "played backward" in time to figure out who the mentor was at any earlier point.<br><br>the mentorship module was rolled out gradually: 10% of new users initially, then 25%, 50%, 75%, then 100%. the boundary dates of each step come from the wikipedia mediawiki-config commit history and are listed in the next cell. the relevant identifying window is <strong>2019-09-20 to 2025-02-16</strong>.</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Setup</h2><br><br>This notebook performs a data-quality audit of the mentorship-assignment data used in the 2SLS analysis. The audit answers a single question: for every user in Martin's mentorship-state table who does not have a corresponding row in the server-side mentor-assignment snapshot, what is the reason that row is absent?<br><br>The next cell imports libraries, defines absolute paths to the three input files, and declares the rollout phase table. The inputs are:<br><br>- <code>DATASET</code> (<code>inputs/z_mentorship_state.tsv</code>) — Martin's per-user file with two columns: <code>userId</code> and <code>mentorshipState</code>.<br>- <code>SNAPSHOT</code> (<code>inputs/cov_mentor_mentee_assignment_*.sql.gz</code>) — a MariaDB dump of the GrowthExperiments <code>cov_mentor_mentee</code> table. Each row records that a particular mentee was assigned a particular mentor server-side.<br>- <code>REG_FILE</code> (<code>build/registrations.jsonl</code>) — local en.wiki registration metadata parsed from the public dump: registration timestamp (<code>reg_ts</code>) and whether the account was self-created (<code>is_self</code>).<br><br>The <code>ROLLOUT</code> table records the production rollout phases of the mentorship feature. Phases are defined by gerrit commit dates and are used in later cells to assign each user a phase based on their registration date.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [42]:</div>
<div class="cell-content">
<div class="input-area"><pre>import os, re, gzip, json, pickle
from pathlib import Path
import pandas as pd
import numpy as np
# ---- paths ----
ROOT = Path("/home/yubozhou/2026_summer/wikipedia_2sls/2sls_pipeline")
DATASET = ROOT / "inputs/z_mentorship_state.tsv" # Martin's 4.98M list (userId, mentorshipState)
SNAPSHOT = ROOT / "inputs/cov_mentor_mentee_assignment_20260530.sql.gz" # mentor-mentee snapshot dump
REG_FILE = ROOT / "build/registrations.jsonl" # 11.87M registration timestamps
CLAIMLOG = ROOT / "inputs/excl_mentor_claim_log_raw.jsonl" # 1.59M claim/set mentor events
# ---- cache dir ----
CACHE = ROOT / "analysis/diagnose_missing_mentors/cache"
CACHE.mkdir(parents=True, exist_ok=True)
# ---- rollout phases (a user's reg date decides their phase) ----
# Dates = gerrit committer dates = production effective dates.
# Early phases are NESTED inside the Newcomer Homepage rollout (homepage &lt; 100%),
# so they are NOT clean treatment periods. The per-user mentorship rollout only
# becomes identifying once Homepage = 100% on 2022-03-07.
# Columns: (label, start, end, mentorship_pct, homepage_pct, identifying)
ROLLOUT = [
("pre_anything", "2021-01-01", "2021-06-07", None, 0.00, False),
("homepage_2pct", "2021-06-08", "2021-09-19", None, 0.02, False),
("homepage_25pct_mentor_20pct", "2021-09-20", "2022-03-06", 0.20, 0.25, False),
("p10", "2022-03-07", "2023-07-10", 0.10, 1.00, True),
("p25", "2023-07-11", "2023-10-04", 0.25, 1.00, True),
("p50", "2023-10-05", "2025-02-02", 0.50, 1.00, True),
("p75", "2025-02-03", "2025-02-16", 0.75, 1.00, True),
("p100", "2025-02-17", "2026-6-8", 1.00, 1.00, False), # no control arm
]
def helper_cache(name):
return CACHE / name</pre></div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 1 — Load the mentorship-state table and compute the <code>no_row</code> count per state</h2><br><br>This cell reads <code>z_mentorship_state.tsv</code> into a DataFrame called <code>ds</code>, loads the mentor-assignment snapshot from a cached pickle (or rebuilds it from the SQL dump on first run), and computes — for each value of <code>mentorshipState</code> — how many users do and do not have at least one row in the snapshot.<br><br>Three values of <code>mentorshipState</code> appear in this file:<br><br>- <code>0</code> — the user was placed in the disabled arm of the mentorship A/B test (UI not shown).<br>- <code>unset</code> — no value was written to <code>user_properties</code> for this preference. Per Martin's release script (<code>notebooks/generate_dataset_for_release.ipynb</code>, function <code>convert_up_property</code>), <code>unset</code> is mapped to the enabled bucket. The reason <code>unset</code> dominates the early period is that the A/B-assignment code only runs when the user is also shown the Newcomer Homepage; users not shown the homepage have no value written and remain <code>unset</code>.<br>- <code>50</code> — present for only a handful of users. The precise meaning of <code>50</code> is not documented in this repository. Martin's release script maps it to the same enabled bucket as <code>1</code> and <code>NaN</code>. This notebook reports counts for <code>50</code> separately throughout, in case its semantics turn out to differ.<br><br>The printed totals are:<br><br>- Dataset size: <strong>4,981,433</strong> users.<br>- Per-state counts: <code>0</code> 2,457,315; <code>unset</code> 2,524,086; <code>50</code> 32.<br>- The snapshot covers <strong>5,758,864</strong> mentees with at least one assignment row.<br>- Crosstab <code>mentorshipState × has_snapshot_row</code> gives the <code>no_row</code> count per state: state <code>0</code> → 11,600 (0.47%); state <code>50</code> → 4 (12.50%); state <code>unset</code> → 540,773 (21.42%). The total <code>no_row</code> count across all states is <strong>552,377</strong>. All subsequent cells refer to these 552,377 users as the <code>no_row</code> population.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [43]:</div>
<div class="cell-content">
<div class="input-area"><pre>
# load dataset
ds = pd.read_csv(DATASET, sep="\t", dtype={"userId": "int64", "mentorshipState": "string"})
print(len(ds), "users in dataset")
print(ds["mentorshipState"].value_counts(dropna=False), "\n")
# parse snapshot (cached): mentee_id -&gt; set of roles
snap_pkl = helper_cache("snap.pkl")
if snap_pkl.exists():
snap = pickle.load(open(snap_pkl, "rb"))
else:
pat = re.compile(rb"\((\d+),'([^']+)',(\d+),(\d+)\)")
snap = {}
with gzip.open(SNAPSHOT, "rb") as f:
for line in f:
if not line.startswith(b"INSERT"):
continue
for m in pat.finditer(line):
snap.setdefault(int(m.group(1)), set()).add(m.group(2).decode())
pickle.dump(snap, open(snap_pkl, "wb"))
print(len(snap), "mentees have at least one snapshot row\n")
# mismatch: per mentorshipState, how many users have NO row in snapshot
ds["has_snapshot_row"] = ds["userId"].map(lambda u: u in snap)
g = ds.groupby("mentorshipState")["has_snapshot_row"].agg(n="size", in_snap="sum")
g["no_row"] = g["n"] - g["in_snap"]
g["no_row_pct"] = (g["no_row"] / g["n"] * 100).round(4)
print(g[["n", "in_snap", "no_row", "no_row_pct"]])
</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">4981433 users in dataset
mentorshipState
unset 2524086
0 2457315
50 32
Name: count, dtype: Int64
5758864 mentees have at least one snapshot row
n in_snap no_row no_row_pct
mentorshipState
0 2457315 2445715 11600 0.4721
50 32 28 4 12.5000
unset 2524086 1983313 540773 21.4245
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 2 — When does each <code>mentorshipState</code> value appear in time, and where is <code>no_row</code> concentrated?</h2><br><br>Before assigning causal reasons to the 552,377 <code>no_row</code> users, this cell describes the temporal distribution of <code>mentorshipState</code> values and of <code>no_row</code> users. It loads <code>build/registrations.jsonl</code> (cached), attaches each user's local en.wiki registration timestamp (<code>reg_ts</code>) and registration month (<code>reg_month</code>) to <code>ds</code>, and prints three monthly tables:<br><br>1. <strong>Counts per month</strong>, broken down by <code>mentorshipState</code>. This shows when each state value first appears.<br>2. <strong><code>no_row</code> count per month</strong>, broken down by <code>mentorshipState</code>. This shows the absolute volume of missing-row users month by month.<br>3. <strong><code>no_row</code> count per month as a percentage of that month's total registrants</strong>. This shows the rate at which <code>no_row</code> occurs over time.<br><br>Two facts read from the output are used later:<br><br>- State <code>0</code> does not appear until <strong>2021-09</strong> (first non-zero count 7,521). State <code>50</code> first appears in 2021-04 with a single row. Before 2021-09 every registrant in <code>ds</code> is <code>unset</code>. This is consistent with state <code>0</code> only being written after the mentorship A/B was activated.<br>- The monthly <code>no_row</code> rate is highest in the pre-rollout months and decays after 2021-06. Months from 2025-03 onward have very small total registrant counts because the dataset's right edge is the date Martin produced the file.<br><br>The remainder of the notebook decomposes the 552,377 <code>no_row</code> users into mutually exclusive reasons.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [44]:</div>
<div class="cell-content">
<div class="input-area"><pre># snapshot (cached)
snap_pkl = helper_cache("snap.pkl")
if snap_pkl.exists():
snap = pickle.load(open(snap_pkl, "rb"))
else:
pat = re.compile(rb"\((\d+),'([^']+)',(\d+),(\d+)\)")
snap = {}
with gzip.open(SNAPSHOT, "rb") as f:
for line in f:
if not line.startswith(b"INSERT"):
continue
for m in pat.finditer(line):
snap.setdefault(int(m.group(1)), set()).add(m.group(2).decode())
pickle.dump(snap, open(snap_pkl, "wb"))
# registration timestamps (cached)
reg_pkl = helper_cache("reg_ts.pkl")
if reg_pkl.exists():
reg = pickle.load(open(reg_pkl, "rb"))
else:
reg = {}
with open(REG_FILE) as f:
for line in f:
o = json.loads(line)
reg[o["uid"]] = o["reg_ts"]
pickle.dump(reg, open(reg_pkl, "wb"))
# attach month + no_row flag
ds["reg_ts"] = pd.to_datetime(ds["userId"].map(reg), format="mixed", errors="coerce")
ds["reg_month"] = ds["reg_ts"].dt.to_period("M").astype("string")
ds["no_row"] = ~ds["userId"].map(lambda u: u in snap)
# table 1: counts of each state per month
counts = ds.pivot_table(index="reg_month", columns="mentorshipState",
aggfunc="size", fill_value=0)
counts["total"] = counts.sum(axis=1)
print("=== counts per month ===")
print(counts.to_string())
# table 2: per month, no_row count of each state
norow = (ds[ds["no_row"]]
.pivot_table(index="reg_month", columns="mentorshipState",
aggfunc="size", fill_value=0)
.reindex(counts.index, fill_value=0))
print("\n=== no_row count per month ===")
print(norow.to_string())
# table 3: per month, no_row count of each state / that month's total registered users (%)
norow = (ds[ds["no_row"]]
.pivot_table(index="reg_month", columns="mentorshipState",
aggfunc="size", fill_value=0)
.reindex(counts.index, fill_value=0))
pct = norow.div(counts["total"], axis=0).mul(100).round(4)
print("\n=== no_row count as pct of monthly total ===")
print(pct.to_string())</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">=== counts per month ===
mentorshipState 0 50 unset total
reg_month
2021-01 0 0 144367 144367
2021-02 0 0 123955 123955
2021-03 0 0 128316 128316
2021-04 0 1 113255 113256
2021-05 0 0 114201 114201
2021-06 0 0 105091 105091
2021-07 0 0 96899 96899
2021-08 0 0 98437 98437
2021-09 7521 0 98131 105652
2021-10 20744 0 85426 106170
2021-11 19849 0 80337 100186
2021-12 20404 0 81906 102310
2022-01 21752 0 90340 112092
2022-02 20343 0 82828 103171
2022-03 77733 0 27184 104917
2022-04 82665 0 11043 93708
2022-05 83378 0 11146 94524
2022-06 99563 0 12471 112034
2022-07 75959 1 9345 85305
2022-08 75999 0 11077 87076
2022-09 83747 0 12978 96725
2022-10 89413 0 11971 101384
2022-11 87836 0 11506 99342
2022-12 85440 0 10957 96397
2023-01 108096 3 17324 125423
2023-02 90925 0 13150 104075
2023-03 99392 1 12059 111452
2023-04 93025 0 10949 103974
2023-05 87331 0 10320 97651
2023-06 79192 0 9053 88245
2023-07 70964 1 18019 88984
2023-08 68605 0 24410 93015
2023-09 71452 0 26195 97647
2023-10 51557 1 45472 97030
2023-11 50337 1 50845 101183
2023-12 43299 2 43362 86663
2024-01 48400 2 51687 100089
2024-02 43336 2 44829 88167
2024-03 44125 1 45206 89332
2024-04 43522 0 44507 88029
2024-05 43515 0 44782 88297
2024-06 39784 2 39745 79531
2024-07 42842 2 42976 85820
2024-08 46381 2 48200 94583
2024-09 44081 2 46140 90223
2024-10 44586 2 45672 90260
2024-11 43692 1 44057 87750
2024-12 44204 1 44113 88318
2025-01 47178 1 49680 96859
2025-02 14226 1 71066 85293
2025-03 54 0 57 111
2025-04 15 0 9 24
2025-05 28 0 25 53
2025-06 22 0 20 42
2025-07 20 0 20 40
2025-08 21 0 19 40
2025-09 20 0 26 46
2025-10 23 0 16 39
2025-11 17 0 20 37
2025-12 43 0 43 86
2026-01 14 0 18 32
2026-02 12 2 19 33
2026-03 13 0 25 38
2026-04 13 0 13 26
=== no_row count per month ===
mentorshipState 0 50 unset
reg_month
2021-01 0 0 144279
2021-02 0 0 123853
2021-03 0 0 128193
2021-04 0 0 113150
2021-05 0 0 14848
2021-06 0 0 110
2021-07 0 0 102
2021-08 0 0 103
2021-09 18 0 95
2021-10 64 0 154
2021-11 58 0 201
2021-12 58 0 197
2022-01 61 0 221
2022-02 60 0 165
2022-03 221 0 72
2022-04 208 0 32
2022-05 232 0 34
2022-06 333 0 61
2022-07 311 1 37
2022-08 325 0 46
2022-09 312 0 47
2022-10 262 0 42
2022-11 280 0 45
2022-12 332 0 42
2023-01 442 0 65
2023-02 304 0 47
2023-03 321 0 45
2023-04 339 0 48
2023-05 360 0 50
2023-06 305 0 46
2023-07 299 0 85
2023-08 279 0 93
2023-09 286 0 101
2023-10 264 0 226
2023-11 231 0 228
2023-12 227 1 254
2024-01 274 0 277
2024-02 248 0 294
2024-03 244 0 256
2024-04 250 0 230
2024-05 310 0 300
2024-06 282 0 282
2024-07 408 0 407
2024-08 324 0 360
2024-09 341 1 341
2024-10 380 0 375
2024-11 390 0 419
2024-12 420 0 409
2025-01 649 1 630
2025-02 247 0 2317
2025-03 5 0 6
2025-04 3 0 4
2025-05 5 0 3
2025-06 0 0 1
2025-07 0 0 5
2025-08 0 0 2
2025-09 0 0 2
2025-10 0 0 2
2025-11 1 0 3
2025-12 0 0 1
2026-01 1 0 1
2026-02 0 0 2
2026-03 0 0 2
2026-04 0 0 0
=== no_row count as pct of monthly total ===
mentorshipState 0 50 unset
reg_month
2021-01 0.0000 0.0000 99.9390
2021-02 0.0000 0.0000 99.9177
2021-03 0.0000 0.0000 99.9041
2021-04 0.0000 0.0000 99.9064
2021-05 0.0000 0.0000 13.0016
2021-06 0.0000 0.0000 0.1047
2021-07 0.0000 0.0000 0.1053
2021-08 0.0000 0.0000 0.1046
2021-09 0.0170 0.0000 0.0899
2021-10 0.0603 0.0000 0.1451
2021-11 0.0579 0.0000 0.2006
2021-12 0.0567 0.0000 0.1926
2022-01 0.0544 0.0000 0.1972
2022-02 0.0582 0.0000 0.1599
2022-03 0.2106 0.0000 0.0686
2022-04 0.2220 0.0000 0.0341
2022-05 0.2454 0.0000 0.0360
2022-06 0.2972 0.0000 0.0544
2022-07 0.3646 0.0012 0.0434
2022-08 0.3732 0.0000 0.0528
2022-09 0.3226 0.0000 0.0486
2022-10 0.2584 0.0000 0.0414
2022-11 0.2819 0.0000 0.0453
2022-12 0.3444 0.0000 0.0436
2023-01 0.3524 0.0000 0.0518
2023-02 0.2921 0.0000 0.0452
2023-03 0.2880 0.0000 0.0404
2023-04 0.3260 0.0000 0.0462
2023-05 0.3687 0.0000 0.0512
2023-06 0.3456 0.0000 0.0521
2023-07 0.3360 0.0000 0.0955
2023-08 0.3000 0.0000 0.1000
2023-09 0.2929 0.0000 0.1034
2023-10 0.2721 0.0000 0.2329
2023-11 0.2283 0.0000 0.2253
2023-12 0.2619 0.0012 0.2931
2024-01 0.2738 0.0000 0.2768
2024-02 0.2813 0.0000 0.3335
2024-03 0.2731 0.0000 0.2866
2024-04 0.2840 0.0000 0.2613
2024-05 0.3511 0.0000 0.3398
2024-06 0.3546 0.0000 0.3546
2024-07 0.4754 0.0000 0.4742
2024-08 0.3426 0.0000 0.3806
2024-09 0.3780 0.0011 0.3780
2024-10 0.4210 0.0000 0.4155
2024-11 0.4444 0.0000 0.4775
2024-12 0.4756 0.0000 0.4631
2025-01 0.6700 0.0010 0.6504
2025-02 0.2896 0.0000 2.7165
2025-03 4.5045 0.0000 5.4054
2025-04 12.5000 0.0000 16.6667
2025-05 9.4340 0.0000 5.6604
2025-06 0.0000 0.0000 2.3810
2025-07 0.0000 0.0000 12.5000
2025-08 0.0000 0.0000 5.0000
2025-09 0.0000 0.0000 4.3478
2025-10 0.0000 0.0000 5.1282
2025-11 2.7027 0.0000 8.1081
2025-12 0.0000 0.0000 1.1628
2026-01 3.1250 0.0000 3.1250
2026-02 0.0000 0.0000 6.0606
2026-03 0.0000 0.0000 5.2632
2026-04 0.0000 0.0000 0.0000
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 3 — Enumerate the candidate reasons a user can be <code>no_row</code>, and resolve those answerable from existing fields</h2><br><br>The mentor-assignment snapshot writes a row only when the server-side assignment hook fires for a user. There are five candidate reasons for a user to be in <code>ds</code> but absent from the snapshot:<br><br>1. <strong>Pre-rollout</strong> — the user registered before mentorship was active on en.wiki (effective date <strong>2021-06-01</strong>). The assignment hook never ran for them.<br>2. <strong>Auto-created</strong> — the local en.wiki account was created by CentralAuth or by another user (not self-registration). The <code>onLocalUserCreated</code> code path is not the same as <code>onAccountCreated</code>, and auto-created accounts can miss the assignment.<br>3. <strong>Indefinitely blocked at registration</strong> — when a registration is blocked, the GrowthExperiments code drops the assignment row entirely.<br>4. <strong>No mentor available</strong> — the auto-assign mentor pool was empty at the moment of registration.<br>5. <strong>Deleted account</strong> — the local user row was deleted after registration, so neither the snapshot nor <code>build/registrations.jsonl</code> records the user.<br><br>Reasons 1 and 2 can be answered directly from fields already present in <code>ds</code> (<code>reg_ts</code>, <code>is_self</code>). Reasons 3 and 4 require an external API call to determine block status (cell 7). Reason 5 is detectable as <code>reg_ts</code> being missing.<br><br>This cell tags every <code>no_row</code> user with three boolean flags — <code>cause_pre_rollout</code> (<code>reg_ts < 2021-06-01</code>), <code>is_self == False</code> (auto-created), and <code>reg_ts_missing</code> (no local registration row) — and prints the counts for each.<br><br>Output among the 552,377 <code>no_row</code> users:<br><br>- Reason 1, pre-rollout: <strong>524,323</strong> (94.92%).<br>- Reason 2, auto-created (<code>is_self == False</code>): <strong>0</strong> (0.00%).<br>- Aside, <code>reg_ts</code> missing (preliminarily labelled "deleted"): <strong>6,451</strong> (1.17%).<br>- Remainder after excluding reasons 1 and 2: <strong>28,054</strong> (5.08%).<br><br>The label "deleted" attached to the 6,451 is preliminary; cell 13 re-checks it against CentralAuth and finds it misleading. The 28,054 remainder is the group that needs block-status information to be classified between reasons 3 and 4.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [45]:</div>
<div class="cell-content">
<div class="input-area"><pre># =============================================================================
# WHY A USER CAN BE "no_row" (in Martin's list but has NO mentor row in snapshot)
#
# Scope: this runs on ALL no_row users across every mentorshipState
# (0 / 50 / unset), not just state=0. `nr = ds[ds["no_row"]]` has no
# state filter, so the totals below are the 0 + 50 + unset combined.
#
# Assignment mechanism differs by state:
# - unset / 0 : a mentor is assigned synchronously at registration
# (MentorHooks::onLocalUserCreated). state=0 (DISABLED) only
# hides the UI; it does NOT block the backend assignment.
# - 50 : proactive-assignment flag (2024-era). Assignment is done by an
# async backend job, NOT onLocalUserCreated. So a no_row state=50
# user can simply mean that async job never ran / failed — a
# different mechanism from the reasons below.
#
# A user ends up with no mentor row for one of FIVE reasons. These are NOT
# mutually exclusive (e.g. a user can be both pre-rollout and autocreated); the
# final per-user classification in the later cell resolves overlaps by priority.
#
# 1. pre-rollout : registered before en.wiki turned mentorship on (~2021-06).
# The feature wasn't live yet, so nobody was assigned.
# -&gt; detectable from reg_ts. [we HAVE this]
# 2. autocreated : the en.wiki local account was auto-created (CentralAuth) or
# created by someone else, not self-registered. onLocalUserCreated
# returns early for these.
# -&gt; detectable from is_self == False. [we HAVE this]
# 3. blocked : user was indefinitely blocked, which DROPS the mentor row.
# -&gt; from block_status.jsonl (fetched in a later cell).
# [we NOW HAVE this]
# 4. no mentor available at registration : the auto-assign mentor pool was empty
# / everyone excluded at that moment. (There may be other
# causes I cannot enumerate.)
# -&gt; no direct evidence; only by elimination. [residual]
# 5. deleted : the account was deleted, so its registration record is gone
# and reg_ts is missing.
# -&gt; detectable from reg_ts being NaN. [we HAVE this]
#
# This cell quantifies reasons 1, 2 and 5 among the no_row users (the ones we can
# cleanly identify here), and reports how many remain for reasons 3 and 4 (which
# the block-fetch cell resolves later).
# =============================================================================
# ---- load dataset ----
if "ds" not in globals():
ds = pd.read_csv(DATASET, sep="\t", dtype={"userId": "int64", "mentorshipState": "string"})
# ---- snapshot (cached): used to flag no_row ----
snap_pkl = helper_cache("snap.pkl")
if snap_pkl.exists():
snap = pickle.load(open(snap_pkl, "rb"))
else:
pat = re.compile(rb"\((\d+),'([^']+)',(\d+),(\d+)\)")
snap = {}
with gzip.open(SNAPSHOT, "rb") as f:
for line in f:
if not line.startswith(b"INSERT"):
continue
for m in pat.finditer(line):
snap.setdefault(int(m.group(1)), set()).add(m.group(2).decode())
pickle.dump(snap, open(snap_pkl, "wb"))
# ---- registration info (cached): reg_ts + is_self in one pass ----
reginfo_pkl = helper_cache("reg_info.pkl")
if reginfo_pkl.exists():
reg_ts_map, is_self_map = pickle.load(open(reginfo_pkl, "rb"))
else:
reg_ts_map, is_self_map = {}, {}
with open(REG_FILE) as f:
for line in f:
o = json.loads(line)
reg_ts_map[o["uid"]] = o["reg_ts"]
is_self_map[o["uid"]] = bool(o.get("is_self"))
pickle.dump((reg_ts_map, is_self_map), open(reginfo_pkl, "wb"))
# ---- tag every user with no_row / reg_ts / is_self ----
ds["no_row"] = ~ds["userId"].map(lambda u: u in snap)
ds["reg_ts"] = pd.to_datetime(ds["userId"].map(reg_ts_map), format="mixed", errors="coerce")
ds["is_self"] = ds["userId"].map(is_self_map) # True=self-registered, False=autocreated/created-by-other, NaN=unknown (deleted account)
# ---- restrict to no_row users ----
ROLLOUT_LIVE = pd.Timestamp("2021-06-01") # en.wiki mentorship becomes effective ~here
nr = ds[ds["no_row"]].copy()
nr["cause_pre_rollout"] = nr["reg_ts"] &lt; ROLLOUT_LIVE # reason 1
nr["cause_autocreated"] = nr["is_self"] == False # reason 2
nr["reg_ts_missing"] = nr["reg_ts"].isna() # deleted accounts (no reg_ts)
total = len(nr)
print(f"total no_row users: {total:,}\n")
n1 = nr['cause_pre_rollout'].sum()
n2 = nr['cause_autocreated'].sum()
n3 = nr['reg_ts_missing'].sum()
print(f"reason 1 pre-rollout (reg_ts &lt; {ROLLOUT_LIVE.date()}): {n1:,} ({n1/total*100:.2f}%)")
print(f"reason 2 autocreated (is_self == False) : {n2:,} ({n2/total*100:.2f}%)")
print(f"(aside) reg_ts unknown (deleted account) : {n3:,} ({n3/total*100:.2f}%)")
print("\noverlap (a user may match both):")
print(pd.crosstab(nr["cause_pre_rollout"], nr["cause_autocreated"],
rownames=["pre_rollout"], colnames=["autocreated"]))
rest = nr[~nr["cause_pre_rollout"] &amp; ~nr["cause_autocreated"]]
print(f"\nremaining no_row after excluding reasons 1 &amp; 2: {len(rest):,}({len(rest)/total*100:.2f}%)")
print("this remainder needs block data (reason 3) and elimination (reason 4).")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">total no_row users: 552,377
reason 1 pre-rollout (reg_ts &lt; 2021-06-01): 524,323 (94.92%)
reason 2 autocreated (is_self == False) : 0 (0.00%)
(aside) reg_ts unknown (deleted account) : 6,451 (1.17%)
overlap (a user may match both):
autocreated False
pre_rollout
False 28054
True 524323
remaining no_row after excluding reasons 1 &amp; 2: 28,054(5.08%)
this remainder needs block data (reason 3) and elimination (reason 4).
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 3b — Export the post-rollout self-registered remainder for the block-status API query</h2><br><br>The previous cell left 28,054 <code>no_row</code> users unexplained after removing pre-rollout and auto-created. Of those, 6,451 have no <code>reg_ts</code> (preliminary "deleted"). The remaining <strong>21,603</strong> users are post-rollout, self-registered, and have a known <code>reg_ts</code>. These are the users for whom the block-status check is meaningful.<br><br>This cell collects their userIds, resolves each to a username from <code>build/registrations.jsonl</code> (the MediaWiki blocks API takes usernames, not userIds), and writes the (uid, name) pairs to <code>analysis/diagnose_missing_mentors/remainder_to_block.tsv</code>. The next cell consumes that file.<br><br>Printed output confirms: remainder <strong>21,603</strong>; names resolved <strong>21,603</strong>; output file written.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [46]:</div>
<div class="cell-content">
<div class="input-area"><pre># export the remainder (post-rollout, self-registered, no_row) with usernames
need = set(ds.loc[ds["no_row"] &amp; (ds["reg_ts"] &gt;= ROLLOUT_LIVE) &amp; (ds["is_self"] != False),
"userId"].astype(int))
print("remainder:", len(need))
uid2name = {}
with open(REG_FILE) as f:
for line in f:
o = json.loads(line)
if o["uid"] in need:
uid2name[o["uid"]] = o["name"]
print("names resolved:", len(uid2name))
out = ROOT / "analysis/diagnose_missing_mentors/remainder_to_block.tsv"
with open(out, "w") as fo:
for u, n in uid2name.items():
fo.write(f"{u}\t{n}\n")
print("written:", out)</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">remainder: 21603
names resolved: 21603
written: /home/yubozhou/2026_summer/wikipedia_2sls/2sls_pipeline/analysis/diagnose_missing_mentors/remainder_to_block.tsv
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell">Of the 552,377 no_row users (all states: 0 + 50 + unset), this cell has so far identified:<br>- pre-rollout: 524,323<br>- deleted account (reg_ts missing): 6,451<br><br>The remaining <strong>21,603</strong> (post-rollout, self-registered) still need block lookup — exported next and resolved into reason 3 (indefinitely blocked) vs reason 4 (residual).</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 4 — Fetch block status from the en.wiki API and split the remainder into reason 3 vs reason 4</h2><br><br>This cell queries the public en.wiki MediaWiki API (<code>action=query&list=blocks</code>) for each of the 21,603 users exported above, asking whether the username is currently indefinitely blocked. The results are written one record per line to <code>analysis/diagnose_missing_mentors/block_status.jsonl</code>. The fetch is resume-safe: usernames already present in the output file are skipped.<br><br>A user is classified as <strong>reason 3 (indefinitely blocked)</strong> if the API returns a block record whose <code>expiry == "infinite"</code>. The other users in the 21,603 are classified as <strong>reason 4 (no mentor available, or unknown residual)</strong> by elimination — they are post-rollout, self-registered, not deleted, and not currently indefinitely blocked, so the assignment hook should have fired. The most likely explanation is that the mentor pool was empty at their registration moment; other unknown failure modes remain possible.<br><br>Printed counts of the 21,603 remainder:<br><br>- Reason 3, indefinitely blocked: <strong>20,974</strong> (97.09%).<br>- Reason 4, no mentor available or unknown residual: <strong>629</strong> (2.91%).<br><br>Combined with reasons 1, 2 and the preliminary 6,451 "deleted" count, the five reasons sum to 524,323 + 0 + 20,974 + 629 + 6,451 = 552,377, which matches the <code>no_row</code> total exactly.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [47]:</div>
<div class="cell-content">
<div class="input-area"><pre>import time
from urllib.parse import urlencode
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
API = "https://en.wikipedia.org/w/api.php"
UA = "WikiMentorResearch/1.0 (academic; contact: yubozhou@umich.edu)"
INP = ROOT / "analysis/diagnose_missing_mentors/remainder_to_block.tsv"
OUT = ROOT / "analysis/diagnose_missing_mentors/block_status.jsonl"
def api_get(params):
url = API + "?" + urlencode(dict(params, format="json"))
for attempt in range(6):
try:
req = Request(url, headers={"User-Agent": UA})
with urlopen(req, timeout=60) as r:
return json.loads(r.read().decode())
except (HTTPError, URLError, TimeoutError) as e:
time.sleep(0.4 * (2 ** attempt))
raise RuntimeError("API failed: " + url)
# load the list of (uid, name)
todo = []
with open(INP) as f:
for line in f:
uid, name = line.rstrip("\n").split("\t", 1)
todo.append((int(uid), name))
# resume: skip uids already fetched
done = set()
if OUT.exists():
with open(OUT) as f:
for line in f:
try: done.add(json.loads(line)["uid"])
except Exception: pass
todo = [(u, n) for u, n in todo if u not in done]
print(f"to fetch: {len(todo):,} (already done {len(done):,})")
# fetch in batches of 50
name2uid = {n: u for u, n in todo}
with open(OUT, "a") as fout:
for i in range(0, len(todo), 50):
names = [n for _, n in todo[i:i+50]]
data = api_get({"action": "query", "list": "users",
"ususers": "|".join(names), "usprop": "blockinfo"})
seen = set()
for u in data.get("query", {}).get("users", []):
name = u.get("name"); uid = name2uid.get(name)
if uid is None: continue
blocked = "blockid" in u
expiry = u.get("blockexpiry")
indef = blocked and expiry in ("infinity","infinite","indefinite","never")
fout.write(json.dumps({"uid": uid, "name": name, "blocked": blocked,
"indefinite": bool(indef), "expiry": expiry,
"reason": u.get("blockreason")}) + "\n")
seen.add(name)
for name in names:
if name not in seen:
fout.write(json.dumps({"uid": name2uid[name], "name": name, "blocked": False,
"indefinite": False, "expiry": None,
"reason": "api_no_return"}) + "\n")
fout.flush()
if (i // 50) % 20 == 0: print(f" {i+len(names):,}/{len(todo):,}")
time.sleep(0.4)
print("fetch done.")
# ---- results: reason 3 vs reason 4 ----
blk = pd.read_json(OUT, lines=True)
indef_uids = set(blk.loc[blk["indefinite"], "uid"])
rest = ds[ds["no_row"] &amp; (ds["reg_ts"] &gt;= ROLLOUT_LIVE) &amp; (ds["is_self"] != False)].copy()
rest["cause_blocked"] = rest["userId"].isin(indef_uids)
n_rest = len(rest)
n_blk = int(rest["cause_blocked"].sum())
print(f"remainder (reasons 3 &amp; 4): {n_rest:,}")
print(f"reason 3 indefinitely blocked (row dropped): {n_blk:,} ({n_blk/n_rest*100:.2f}%)")
print(f"reason 4 no mentor avail / unknown residual: {n_rest-n_blk:,}({(n_rest-n_blk)/n_rest*100:.2f}%)")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">to fetch: 0 (already done 21,603)
fetch done.
remainder (reasons 3 &amp; 4): 21,603
reason 3 indefinitely blocked (row dropped): 20,974 (97.09%)
reason 4 no mentor avail / unknown residual: 629(2.91%)
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h3>Why no_row — final breakdown (ALL states: 0 + 50 + unset)</h3><br><br>This covers every no_row user, not just state=0. Of the 552,377 total:<br><br>- reason 1 pre-rollout (registered before ~2021-06): <strong>524,323</strong><br>- reason 2 autocreated (is_self == False): <strong>0</strong><br>- reason 3 indefinitely blocked (mentor row dropped): <strong>20,974</strong><br>- reason 4 no mentor available / unknown residual: <strong>629</strong><br>- reason 5 account deleted (reg_ts missing): <strong>6,451</strong><br><br>Sum = 552,377 ✓. The per-state split (how each reason distributes over 0 / 50 / unset) is computed in the reason×state cell below.</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 5 — Did any <code>no_row</code> users actually post a mentor question?</h2><br><br>The cells above classify every <code>no_row</code> user by reason without distinguishing between users who would have used the mentorship feature and users who would not. This cell narrows the focus: among the 552,377 <code>no_row</code> users, how many actually posted a question through the GrowthExperiments mentor-questions interface? Question-askers who did not have a mentor row are the cohort whose treatment status is most likely to be misclassified in the 2SLS analysis.<br><br>This cell:<br><br>- Loads the <code>growthexperiments-mentor-questions</code> event table (one row per question event).<br>- Resolves the asker's username to a <code>userId</code> via <code>build/registrations.jsonl</code>.<br>- Intersects the askers with the <code>no_row</code> users in <code>ds</code>.<br>- Saves the intersection to <code>analysis/diagnose_missing_mentors/asked_but_no_row.tsv</code>.<br><br>Printed counts:<br><br>- Unique mentees who asked at least one question: <strong>36,430</strong>.<br>- Resolved to userId: <strong>35,102</strong> of 36,430.<br>- Askers who appear in <code>ds</code>: <strong>18,593</strong>.<br>- Askers in <code>ds</code> who are <code>no_row</code>: <strong>385</strong>. Of these, 380 are <code>unset</code>, 4 are <code>50</code>, and 1 is <code>0</code>.<br><br>The 385 question-asking <code>no_row</code> users are the population analyzed in the next two cells.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [48]:</div>
<div class="cell-content">
<div class="input-area"><pre># See if any of those who didn't have a mentor row (no_row) had actually ASKED A QUESTION (and thus were more likely to be impacted by missing mentorship, if they were in the treatment group).
# ---- 1. all mentee usernames who asked a question ----
QFILE = ROOT / "inputs/d_mentor_questions.jsonl"
askers = set()
with open(QFILE) as f:
for line in f:
o = json.loads(line)
m = o.get("mentee")
if m:
askers.add(m)
print(f"unique mentees who asked a question: {len(askers):,}")
# ---- 2. map those usernames -&gt; userId (stream registrations.jsonl) ----
name2uid = {}
with open(REG_FILE) as f:
for line in f:
o = json.loads(line)
if o["name"] in askers:
name2uid[o["name"]] = o["uid"]
print(f"resolved to userId: {len(name2uid):,} / {len(askers):,}")
# ---- 3. look up their state + no_row status in the dataset ----
uid2state = dict(zip(ds["userId"].astype(int), ds["mentorshipState"]))
rows = []
for name, uid in name2uid.items():
if uid not in uid2state:
continue # not in Martin's list
state = uid2state[uid]
no_row = uid not in snap # no mentor row in the current snapshot
rows.append((uid, name, state, no_row))
q = pd.DataFrame(rows, columns=["uid", "name", "mentorshipState", "no_row"])
print(f"\naskers present in dataset: {len(q):,}")
# ---- 4. key result: asked a question BUT currently no_row, split by state ----
hit = q[q["no_row"]]
print(f"\n&gt;&gt;&gt; asked a question BUT currently no mentor row (no_row): {len(hit):,}")
print(hit.groupby("mentorshipState").size().to_string())
# save for inspection
hit.to_csv(ROOT / "analysis/diagnose_missing_mentors/asked_but_no_row.tsv",
sep="\t", index=False)
print("\nsaved -&gt; analysis/diagnose_missing_mentors/asked_but_no_row.tsv")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">unique mentees who asked a question: 36,430
resolved to userId: 35,102 / 36,430
askers present in dataset: 18,593
&gt;&gt;&gt; asked a question BUT currently no mentor row (no_row): 385
mentorshipState
0 1
50 4
unset 380
saved -&gt; analysis/diagnose_missing_mentors/asked_but_no_row.tsv
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 6 — Classify the 385 question-asking <code>no_row</code> users by reason</h2><br><br>This cell takes the 385 question-asking <code>no_row</code> users and assigns each one a reason from the five-reason classification. It joins the askers with <code>reg_ts</code>, <code>is_self</code>, and the block-status output produced in cell 7, then applies the same rules used in cell 4 and cell 7. The output is written to <code>asked_but_no_row_classified.tsv</code>.<br><br>Printed counts among the 385:<br><br>- Reason 1, pre-rollout: <strong>6</strong>.<br>- Reason 3, indefinitely blocked: <strong>373</strong>.<br>- Reason 4, residual: <strong>6</strong>.<br><br>Cross-tabulated by <code>mentorshipState</code>:<br><br>- Reason 1 × state: 6 in <code>unset</code>, 0 in <code>0</code> or <code>50</code>.<br>- Reason 3 × state: 368 in <code>unset</code>, 4 in <code>50</code>, 1 in <code>0</code>.<br>- Reason 4 × state: 6 in <code>unset</code>, 0 in <code>0</code> or <code>50</code>.<br><br>The dominant reason among question-asking <code>no_row</code> users is indefinite block (373 of 385, 96.9%). The next cell drills into the textual block reasons for these 373 users.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [49]:</div>
<div class="cell-content">
<div class="input-area"><pre># See why are those people missing mentor rows, and how many of them are indefinitely blocked (reason 3) vs potentially having no mentor available (reason 4, by elimination).
# indefinitely-blocked uids from the block fetch
OUT = ROOT / "analysis/diagnose_missing_mentors/block_status.jsonl"
blk = pd.read_json(OUT, lines=True)
indef_uids = set(blk.loc[blk["indefinite"], "uid"])
# bring reg_ts / is_self onto the 385 askers-without-row
h = hit.merge(ds[["userId", "reg_ts", "is_self"]],
left_on="uid", right_on="userId", how="left")
def classify(r):
if pd.isna(r["reg_ts"]): return "5_deleted"
if r["is_self"] == False: return "2_autocreated"
if r["reg_ts"] &lt; pd.Timestamp(ROLLOUT_LIVE): return "1_pre_rollout"
if r["uid"] in indef_uids: return "3_indef_blocked"
return "4_residual"
h["reason"] = h.apply(classify, axis=1)
print(f"asked a question but currently no_row: {len(h):,}\n")
print("by reason:")
print(h.groupby("reason").size().to_string())
print("\nby reason x state:")
print(pd.crosstab(h["reason"], h["mentorshipState"]))
h.to_csv(ROOT / "analysis/diagnose_missing_mentors/asked_but_no_row_classified.tsv",
sep="\t", index=False)
print("\nsaved -&gt; asked_but_no_row_classified.tsv")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">asked a question but currently no_row: 385
by reason:
reason
1_pre_rollout 6
3_indef_blocked 373
4_residual 6
by reason x state:
mentorshipState 0 50 unset
reason
1_pre_rollout 0 0 6
3_indef_blocked 1 4 368
4_residual 0 0 6
saved -&gt; asked_but_no_row_classified.tsv
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 7 — First look at indefinite-block reasons (restricted to the 373 question-asker subset)</h2><br><br>This cell plots the indefinite-block reasons for the 373 question-asking indefinitely-blocked users identified above, split by <code>mentorshipState</code>. The block reason text is read from <code>block_status.jsonl</code> and bucketed into categories (such as <code>spam/promo</code>, <code>checkuser</code>, <code>sockpuppet</code>, <code>vandalism</code>, <code>not-here</code>, <code>username</code>, <code>disruption</code>, <code>harassment</code>, <code>block-evasion</code>, <code>other</code>) using string matching on the reason field.<br><br>The output is saved to <code>blocked_reason_by_state.png</code> and printed as a count table. The largest categories within the 373 are <code>spam/promo</code> (111 in <code>unset</code>), <code>checkuser</code> (63 in <code>unset</code>, plus 3 in <code>50</code> and 1 in <code>0</code>), and <code>sockpuppet</code> (59 in <code>unset</code>).<br><br>This view covers only the 373 question-asker subset of indefinitely-blocked users, which is small. Cell 14 produces the same breakdown for the full 20,974 indefinitely-blocked <code>no_row</code> population and is the authoritative version. This cell is retained to show the block-reason composition specifically among users who actually engaged with the mentor-question interface.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [50]:</div>
<div class="cell-content">
<div class="input-area"><pre>
import matplotlib.pyplot as plt
# block reasons for the indefinitely-blocked subset
blk = pd.read_json(ROOT / "analysis/diagnose_missing_mentors/block_status.jsonl", lines=True)
ib = h[h["reason"] == "3_indef_blocked"].merge(
blk[["uid", "reason"]].rename(columns={"reason": "block_reason"}),
on="uid", how="left")
print(f"indefinitely blocked: {len(ib)}")
# ---- bucket the messy free-text / template block reasons ----
def bucket(text):
t = (text or "").lower()
if "checkuser" in t: return "checkuser"
if "sock" in t: return "sockpuppet"
if "spam" in t or "advertis" in t or "promot" in t or "paid" in t: return "spam/promo"
if "username" in t or "ublock" in t: return "username"
if "vandal" in t or "voa" in t: return "vandalism"
if "nothere" in t or "not here" in t: return "not-here"
if "disrupt" in t: return "disruption"
if "harass" in t or "personal attack" in t or "npa" in t: return "harassment"
if "lta" in t or "long-term abuse" in t: return "LTA"
if "block evasion" in t or "evasion" in t: return "block-evasion"
if t.strip() == "": return "(empty)"
return "other"
ib["cat"] = ib["block_reason"].map(bucket)
# ---- count: category x state ----
tab = ib.pivot_table(index="cat", columns="mentorshipState",
aggfunc="size", fill_value=0)
tab = tab.loc[tab.sum(axis=1).sort_values(ascending=False).index] # sort by total
print("\ncategory x state:")
print(tab.to_string())
# ---- stacked bar plot ----
ax = tab.plot(kind="bar", stacked=True, figsize=(11, 6))
ax.set_xlabel("block reason category")
ax.set_ylabel("number of users")
ax.set_title("Indefinitely-blocked no_row users (asked a question) — block reason by mentorshipState")
ax.legend(title="mentorshipState")
plt.xticks(rotation=35, ha="right")
plt.tight_layout()
plt.savefig(ROOT / "analysis/diagnose_missing_mentors/blocked_reason_by_state.png", dpi=130)
plt.show()
print("\nsaved -&gt; blocked_reason_by_state.png")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">indefinitely blocked: 373
category x state:
mentorshipState 0 50 unset
cat
spam/promo 0 0 111
checkuser 1 3 63
sockpuppet 0 0 59
not-here 0 0 42
other 0 0 41
disruption 0 1 23
vandalism 0 0 13
username 0 0 9
harassment 0 0 5
block-evasion 0 0 2
</div>
</div>
</div>
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<img class="output-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABEEAAAJOCAYAAABY5xk7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC7AklEQVR4nOzdeZxO9f//8edljJnBGPuMfWuyjiUkg5AtuyiFjyWUaLMmfDBkL+LTQkqZFtEiZckWUsiakqTFYApNDRlhBjOv3x9+c74uY5nhGjNcj/vtNjeuc51zrtd1znXOuc7zep/3cZmZCQAAAAAA4BaXJaMLAAAAAAAAuBEIQQAAAAAAgFcgBAEAAAAAAF6BEAQAAAAAAHgFQhAAAAAAAOAVCEEAAAAAAIBXIAQBAAAAAABegRAEAAAAAAB4BUIQAAAAAADgFQhBgFSaO3euXC6Xtm3b5rF57t+/Xy6XS3Pnzr2m6b/44gvVqFFDOXLkkMvl0qJFi5w69+/f75F6Nm7cqIiICP3zzz/XVKMkRUREyOVyXfP0F0uu84UXXrjquNezPFIj+b39/fff6TJ/6fo/J7h5jR07VhUqVFBSUpLH552W7eh6NGjQQA0aNEjX18jsrrQfvRHLZ86cOSpSpIhOnjyZrq9zNQ0aNFClSpVSNa7L5VJERES61HGjPvu3khtxrMus5s2bp+nTp2fY66fl++f17k82b96s++67T8WLF5efn5+Cg4NVu3ZtDRo0yG28V1999bq/k0yYMEGLFi26rnkA14oQBLhJmZk6duwoX19fffbZZ9q0aZPq16+vli1batOmTSpUqFCa51moUCFt2rRJLVu2dIZt3LhRY8aMua4QBEDaHTp0SFOmTNHYsWOVJQuH65vZlfajr776ql599dV0ff3u3bsrR44cmjJlSrq+DnAryugQJC2uZ3+ydOlShYeHKy4uTlOmTNHKlSs1Y8YM1alTRwsWLEjxOoQguJllzegCAFybQ4cO6ejRo7rvvvvUqFEjt+cKFChwTfP08/PTXXfd5Yny4MVOnz4tf39/j7b+udl4YhnMmDFDuXPnVvv27T1YGTKbChUqpPtrZM2aVX369NFzzz2noUOHKnv27On+mt4kMTFR586dk5+fX0aXgpuEmSk+Pl4BAQEene/17E+mTJmiUqVKacWKFcqa9f9OER966CECVNxy+GkJuA49evRQzpw59euvv6pFixbKmTOnihUrpkGDBikhIcFt3EOHDqljx44KDAxUUFCQHnzwQR05cuSS8922bZvatGmjvHnzyt/fX9WqVdMHH3zgPB8REaGiRYtKkoYOHSqXy6WSJUtKuvTlH8lNkLdu3ap69eope/bsKl26tCZNmuTWzP7iyy4iIiI0ZMgQSVKpUqXkcrnkcrm0bt06Z5oFCxaodu3aypEjh3LmzKlmzZrp22+/veJy69Wrl/LmzatTp06leO6ee+5RxYoVrzh9sqSkJI0fP17FixeXv7+/atSooS+++CJV07755puqUqWK/P39lTdvXt13333as2dPivE2b96s1q1bK1++fPL391eZMmXUv3//K877p59+UunSpVWrVi3FxMRIko4cOaI+ffqoaNGiypYtm0qVKqUxY8bo3LlzbtOm5XNyseR1v3btWvXt21f58+dXvnz51L59ex06dMht3KSkJE2ZMkXlypWTn5+fChYsqG7duun3339P1Wtd/JorV65Uz549VaBAAWXPnl0JCQmpeo1XXnlFWbJkcZaTJE2dOlUul0uPP/64W7158uRJ0ST3YpdrQl+yZEn16NHDeXzq1CkNHjxYpUqVcj4DNWrU0Pvvv+823dW2xastg7/++kuPPvqoihUrJj8/PxUoUEB16tTR6tWrr/g+zpw5ozlz5qhz584pWoGMGTNGtWrVUt68eZUrVy7dcccdmjNnjszMbbw1a9aoQYMGypcvnwICAlS8eHF16NDhkttdsrNnz6p79+7KmTOnlixZIun8l/VXX31VVatWVUBAgPLkyaP7779f+/btc5vWzDRlyhSVKFFC/v7+uuOOO/T5559f8X1e6JVXXtHdd9+tggULKkeOHAoLC9OUKVN09uzZVE2/dOlSVa1aVX5+fipVqpReeOGFFJfiXenSskt9dn755Rd17txZBQsWlJ+fn8qXL69XXnnFbZykpCSNGzdOZcuWVUBAgHLnzq3KlStrxowZkq6+H71U8/WjR4+qX79+KlKkiLJly6bSpUtrxIgRKY4rLpdLTzzxhN555x2VL19e2bNnV5UqVZx1d6EuXbooLi5O8+fPT83iTFdfffWV7rrrLgUEBKhIkSIaOXKkEhMTrzrdDz/8oLZt2ypPnjzy9/dX1apVFRkZmWK8f/75R4MGDVLp0qWdfU+LFi30008/XXbel/rsX0ryZ2jKlCkaN26cSpUqJT8/P61du1ZS6vYZf/31l/r166cKFSooZ86cKliwoO655x599dVXKV5v5syZqlKlinLmzKnAwECVK1dOw4cPT/NyWbdunVwul95//32NGDFChQsXVq5cudS4cWPt3bv3su/3YtHR0Wrfvr1y5cqloKAg/ec//9Fff/3lPH+9x/fk7yubNm1SeHi4AgICVLJkSb311luSzm/nd9xxh7Jnz66wsDAtX748xTxSs92mdnk0aNBAS5cu1YEDB5xt98J9Slq31VmzZql8+fLy8/Nz1lFq1rEknThx4qrH9ov3Jxd+Xq/2fSk2Nlb58+d3C0CSXXgcKlmypHbv3q0vv/zSWR7J30Hj4+M1aNAgVa1aVUFBQcqbN69q166tTz/9NMXyOHnypCIjI515XFh3ar8zAdfMAKTKW2+9ZZJs69atzrDu3btbtmzZrHz58vbCCy/Y6tWrbdSoUeZyuWzMmDHOeKdOnbLy5ctbUFCQvfTSS7ZixQp76qmnrHjx4ibJ3nrrLWfcNWvWWLZs2axevXq2YMECW758ufXo0cNtvOjoaFu4cKFJsieffNI2bdpkO3bscKszKirKmWf9+vUtX758FhoaarNmzbJVq1ZZv379TJJFRkY640VFRaV4nSeffNIk2cKFC23Tpk22adMmO378uJmZjR8/3lwul/Xs2dOWLFliCxcutNq1a1uOHDls9+7dznxHjx5tF+5uvvvuO5Nkr7/+utsy3r17t0myV1555YrrIrnOYsWKWd26de3jjz+2Dz/80GrWrGm+vr62cePGFOvtwuUxYcIEk2SdOnWypUuX2ttvv22lS5e2oKAg+/nnn53xli9fbr6+vla5cmWbO3eurVmzxt5880176KGHUry3v/76y8zM1q1bZ3ny5LG2bdvayZMnzczs8OHDVqxYMStRooS99tprtnr1anvuuefMz8/PevTo4cwrLZ+TS0l+r6VLl7Ynn3zSVqxYYW+88YblyZPHGjZs6Dbuo48+apLsiSeesOXLl9usWbOsQIECVqxYMee9pEbyaxYpUsQeffRR+/zzz+2jjz6yc+fOpeo1fvrpJ5Nk8+bNc+Z57733WkBAgIWGhjrDNm/ebJJs2bJlV6xHko0ePTrF8BIlSlj37t2dx3369LHs2bPbtGnTbO3atbZkyRKbNGmSvfTSS844qdkWr7YMmjVrZgUKFLDZs2fbunXrbNGiRTZq1CibP3/+Fd/H+vXrL/t+e/ToYXPmzLFVq1bZqlWr7LnnnrOAgAC3fU5UVJT5+/tbkyZNbNGiRbZu3Tp77733rGvXrnbs2DFnHEn2/PPPm5nZsWPHrGHDhhYSEmLbtm1z5vXII4+Yr6+vDRo0yJYvX27z5s2zcuXKWXBwsB05csQZL3lb6NWrl33++ec2e/ZsK1KkiIWEhFj9+vWv+H7NzAYMGGAzZ8605cuX25o1a+zFF1+0/Pnz28MPP3zVaVevXm0+Pj5Wt25dW7hwobM/SN52Llwul9uWLv7s7N6924KCgiwsLMzefvttW7lypQ0aNMiyZMliERERzngTJ040Hx8fGz16tH3xxRe2fPlymz59ujPO1faj9evXd1s+p0+ftsqVK1uOHDnshRdesJUrV9rIkSMta9as1qJFixQ1lyxZ0u6880774IMPbNmyZdagQQPLmjWr/fbbbyneY/ny5a19+/ZXXZ7pJflYVLhwYfvf//7n7OMk2eOPP+427sXr46effrLAwEArU6aMvf3227Z06VLr1KmTSbLJkyc748XFxVnFihUtR44cNnbsWFuxYoV9/PHH9vTTT9uaNWvMLPWf/UtJnrZIkSLWsGFD++ijj2zlypUWFRWV6n3GTz/9ZH379rX58+fbunXrbMmSJdarVy/LkiWLrV271hnv/fffd47zK1eutNWrV9usWbPsqaeeSvNyWbt2rfN56dKliy1dutTef/99K168uIWGhtq5c+eu+L6Tt+8SJUrYkCFDbMWKFTZt2jTLkSOHVatWzc6cOWNm1398T/6MlC1b1ubMmWMrVqywVq1amSQbM2aMhYWF2fvvv2/Lli2zu+66y/z8/OyPP/5we53UbLepXR67d++2OnXqWEhIiLPtbtq0yczSvq0WKVLEKleubPPmzbM1a9bYDz/8kKp1nJZj+8X7k7R8X+rdu7dTyzfffOOs04vt2LHDSpcubdWqVXOWR/J30H/++cd69Ohh77zzjq1Zs8aWL19ugwcPtixZsrh939y0aZMFBARYixYtnHkkf29M7Xcm4HoQggCpdLkQRJJ98MEHbuO2aNHCypYt6zyeOXOmSbJPP/3UbbxHHnkkxZejcuXKWbVq1ezs2bNu47Zq1coKFSpkiYmJZpbyS9zFdV4cgkiyzZs3u41boUIFa9asmfP4UicIzz//fIr5mZkdPHjQsmbNak8++aTb8BMnTlhISIh17NjRGXZxCJJcU9WqVd2G9e3b13LlymUnTpywK0mus3Dhwnb69GlneFxcnOXNm9caN2582eVx7Ngx58B78fvx8/Ozzp07O8PKlCljZcqUcXuNi10YgrzzzjuWLVs2e+qpp5z1ZHb+hDtnzpx24MABt2lfeOEFk+Qc+NPyObmU5Pfar18/t+FTpkwxSXb48GEzM9uzZ88lx0sOGoYPH37F17nUa3br1s1teFpeo2jRotazZ08zM0tISLAcOXLY0KFDTZKzzMaPH2++vr7277//XrGe1IYglSpVsnbt2l1xXqndFi+3DMzMcubMaf3797/i61zK5MmTTZJbyHApiYmJdvbsWRs7dqzly5fPkpKSzMzso48+Mkm2c+fOy0574T4kKirKKlSoYBUqVLD9+/c742zatMkk2dSpU92mjY6OtoCAAHvmmWfM7Px25e/vb/fdd5/beBs2bDBJqQpBLvW+3n77bfPx8bGjR49ecfxatWpddn9wrSFIs2bNrGjRok5YkeyJJ54wf39/p6ZWrVql2Jdd7HL7UbOUJy2zZs265HEl+TOxcuVKt5qDg4MtLi7OGXbkyBHLkiWLTZw4McVrdenSxYKDg69Ya3pKPhZdah+XJUsWt33kxevjoYceMj8/Pzt48KDbtM2bN7fs2bPbP//8Y2ZmY8eONUm2atWqy9aRms/+1aYtU6ZMipPE1O4zLnbu3Dk7e/asNWrUyG0beuKJJyx37txXrCe1yyX5pP/iY98HH3xgkpwT+8tJPtYNGDDAbfh7771nkuzdd991hl3P8T35M3JhGBUbG2s+Pj4WEBDgFnjs3LnTJNn//vc/Z1hqt9u0LI+WLVtaiRIlUtSa1m01KCgoxb4sNes4tcd2s8uHIKn5vvT3339b3bp1TZJJMl9fXwsPD7eJEyemWG8VK1ZM1X49+bPdq1cvq1atmttzOXLkcDsuJ0vtdybgenA5DHCdXC6XWrdu7TascuXKOnDggPN47dq1CgwMVJs2bdzG69y5s9vjX3/9VT/99JO6dOkiSTp37pzz16JFCx0+fDhNzVYvFBISojvvvPOKdabFihUrdO7cOXXr1s2tTn9/f9WvX9/tkplLefrpp7Vz505t2LBBkhQXF6d33nnHaY4s/d911sl/F98ho3379vL393ceBwYGqnXr1lq/fv1lm1Zv2rRJp0+fdrs0QpKKFSume+65x2ke+vPPP+u3335Tr1693F7jcsaPH68ePXpo0qRJmjFjhlvT0SVLlqhhw4YqXLiw2/tp3ry5JOnLL7+UlPrPydVcPH3lypUlyVnXyc22L14Gd955p8qXL5/qS4ou1KFDB7fHaXmNRo0aOZeHbNy4UadOndLAgQOVP39+rVq1SpK0evVq57IrT7jzzjv1+eef69lnn9W6det0+vRpt+evZVu8eBkkv87cuXM1btw4ffPNN6m+tOPQoUNyuVzKnz9/iufWrFmjxo0bKygoSD4+PvL19dWoUaMUGxvrXFZUtWpVZcuWTY8++qgiIyNTXLpyoR07duiuu+5ScHCwNmzYoBIlSjjPLVmyRC6XS//5z3/clkFISIiqVKnibOebNm1SfHy8s7yShYeHu83vSr799lu1adNG+fLlc95Xt27dlJiYqJ9//vmy0508eVJbt2697P7gWsTHx+uLL77Qfffdp+zZs6dY//Hx8frmm28knV/H3333nfr166cVK1YoLi7uml4z2Zo1a5QjRw7df//9bsOTt6WLt8+GDRsqMDDQeRwcHKyCBQtect9esGBBxcTEXLFJuZm5vd+0/KXmLkaX28clJSVp/fr1l51uzZo1atSokYoVK+Y2vEePHjp16pQ2bdokSfr88891++23q3Hjxlet5Uqf/atp06aNfH19ncdp3WfMmjVLd9xxh/z9/ZU1a1b5+vrqiy++cLss884779Q///yjTp066dNPP73knVlSu1wurPtCFx8frubibbxjx47KmjWrs8+XUnd8v5JChQqpevXqzuO8efOqYMGCqlq1qgoXLuwML1++vFvtadluk13P8kjrtnrPPfcoT548bsNSs449UWtqvi/ly5dPX331lbZu3apJkyapbdu2+vnnnzVs2DCFhYWl+s5AH374oerUqaOcOXM6n+05c+Zc8pLjS0ntdybgehCCANcpe/bsKU6S/fz8FB8f7zyOjY1VcHBwimlDQkLcHv/555+SpMGDB8vX19ftr1+/fpJ0zbeny5cvX4phfn5+KU7+Uiu51po1a6aodcGCBVets23btipZsqRzne7cuXN18uRJt34gypQp4zbfsWPHus3j4uWXPOzMmTP6999/L/m6sbGxknTJu+cULlzYeT75Gufkvleu5t1331WRIkX00EMPpXjuzz//1OLFi1Msp+Rro5OXVWo/J1dz8bpO7qwveV2ndhmkxcXzSstrNG7cWAcPHtQvv/yi1atXq1q1as418qtXr9bp06e1cePGVJ3UpNb//vc/DR06VIsWLVLDhg2VN29etWvXTr/88ouka9sWL/VeFyxYoO7du+uNN95Q7dq1lTdvXnXr1u2q/bycPn1avr6+8vHxcRu+ZcsWNW3aVJL0+uuva8OGDdq6datGjBjhTCed33ZWr16tggUL6vHHH1eZMmVUpkwZp5+KC61atUp//vmnevfurdy5c7s99+eff8rMFBwcnGI5fPPNN26fXeny2+TVHDx4UPXq1dMff/yhGTNmOF/Ek/cPV9pPHTt2TElJSdf82pcSGxurc+fO6aWXXkrxvlu0aCHp/9b/sGHD9MILL+ibb75R8+bNlS9fPjVq1Oiab6ceGxurkJCQFJ3qFixYUFmzZk2xfaZl3+7v7+90yHg5kZGRKd5zav969ux51fd3pX3clfY9sbGxl92fXDjtX3/9ler99pU++1dzcS1p2WdMmzZNffv2Va1atfTxxx/rm2++0datW3Xvvfe6rbeuXbvqzTff1IEDB9ShQwcVLFhQtWrVcsLh5PedmuWS7GrHh6u5eJvKmjWr8uXL5/Y6qTm+X0nevHlTDMuWLVuK4dmyZZMk5/Oclu022fUsj7Ruq5daT6lZx56oNS3fl2rUqKGhQ4fqww8/1KFDhzRgwADt378/VZ2jLly4UB07dlSRIkX07rvvatOmTdq6dat69ux5xf3OhVL7nQm4HtwdBrgB8uXLpy1btqQYfvGJUPKvvsOGDbvsHSHKli3r+QKvQXKtH330UZp+PUuWJUsWPf744xo+fLimTp2qV199VY0aNXJ7f4sXL3brXOzCX4CklMsveVi2bNku+2tT8peIw4cPp3ju0KFDzvtKvsNOajsKXb58uR588EHVq1dPX3zxhdsyyZ8/vypXrqzx48dfctrk95Xaz8n1unAZXHyycOEySIuLvwSm5TWS7260evVqrVq1Sk2aNHGG//e//9X69euVkJCQqhDEz88vRYd0UsoTgRw5cmjMmDEaM2aM/vzzT6dVSOvWrfXTTz9d07Z4qTvB5M+fX9OnT9f06dN18OBBffbZZ3r22WcVExNzyQ79LpzuzJkzOnnypFvrl/nz58vX11dLlixxC18vdZvBevXqqV69ekpMTNS2bdv00ksvqX///goODnYL64YMGaLffvvNadXVrVs3tzpcLpe++uqrS975InlY8vq+3DaZ3Gne5SxatEgnT57UwoUL3badnTt3XnE6ScqTJ49cLtdlX/tCycvs4s/IxZ+PPHnyyMfHR127dr3siVupUqUknT8JHDhwoAYOHKh//vlHq1ev1vDhw9WsWTNFR0en+U4s+fLl0+bNm2Vmbp+p5BYc17J9Jjt69Kj8/Pyu+Gt869attXXr1muaf2pqSw4LLpS8ni4V6CTLly/fZffbF752gQIFUr3fvtJn/2ou3t7Tss9499131aBBA82cOdPt+RMnTqSY5uGHH9bDDz+skydPav369Ro9erRatWqln3/+WSVKlEj1cvGUI0eOqEiRIs7jc+fOKTY21m3dpeb4nh7Sst16Qlq31cvdLexq69gTruX7kiT5+vpq9OjRevHFF/XDDz9c9XXeffddlSpVSgsWLHB7v5c6Ll9Oar8zAdeDEAS4ARo2bKgPPvhAn332mVtzxnnz5rmNV7ZsWYWGhuq7777ThAkTbnSZl3S5XxqaNWumrFmz6rfffrvkZQCp0bt3b0VERKhLly7au3evJk+e7PZ8WFjYFadfuHChnn/+eefE5sSJE1q8eLHq1auX4hf0ZLVr11ZAQIDeffddPfDAA87w33//XWvWrHGatd5+++0qU6aM3nzzTQ0cOPCqtz4sUaKEvvrqKzVu3NgJQkJDQyVJrVq10rJly1SmTJkUTWEvlNrPyfW65557JJ3/slKzZk1n+NatW7Vnzx6nVcGNeo1ChQqpQoUK+vjjj7V9+3bns9+kSRP16dNH06ZNU65cudzmczklS5bU999/7zZszZo1l20ZJJ3/ZbpHjx767rvvNH36dJ06dSpdtsXixYvriSee0BdffOE0E7+ccuXKSZJ+++03p8mzdP5LdNasWd0+36dPn9Y777xz2Xn5+PioVq1aKleunN577z3t2LHDLQTJkiWLXnvtNeXMmVM9evTQyZMn1bdvX0nnP7uTJk3SH3/8oY4dO172Ne666y75+/vrvffec9sfbNy4UQcOHLhqCJL8ZfnC7czM9Prrr19xOul8oHXnnXdedn9woeDgYPn7+6f4jFx854Ls2bOrYcOG+vbbb1W5cmXnF+eryZ07t+6//3798ccf6t+/v/bv368KFSqk6RfbRo0a6YMPPtCiRYt03333OcPffvtt5/lrtW/fvqveQjNfvnxXDCOu14kTJy65j8uSJYvuvvvuy07XqFEjffLJJzp06JDbSdDbb7+t7NmzO7d3b968uUaNGqU1a9Y4+6HLudJnP63Sss9wuVwpjinff/+9Nm3alOKylmQ5cuRQ8+bNdebMGbVr1067d+9WiRIlUr1cPOW9995zu1Tlgw8+0Llz51Lc4ehqx/f0cK3b7dVcrmWVp7fVy61jT0jN96XDhw9fsrVK8mUsF36+LrdMXC6XsmXL5haAHDlyJMU+9krzSO13JuB6EIIAN0C3bt304osvqlu3bho/frxCQ0O1bNkyrVixIsW4r732mpo3b65mzZqpR48eKlKkiI4ePao9e/Zox44d+vDDD29o7clBxIwZM9S9e3f5+vqqbNmyKlmypMaOHasRI0Zo3759uvfee5UnTx79+eef2rJli/NL+5Xkzp1b3bp108yZM1WiRIk0X7/v4+OjJk2aaODAgUpKStLkyZMVFxd3xdfNnTu3Ro4cqeHDh6tbt27q1KmTYmNjNWbMGPn7+2v06NHOuK+88opat26tu+66SwMGDFDx4sV18OBBrVixQu+9916KeRcqVEhffvmlmjVrprvvvlurVq1SpUqVNHbsWK1atUrh4eF66qmnVLZsWcXHx2v//v1atmyZZs2apaJFi6bpc3I9ypYtq0cffVQvvfSSsmTJoubNm2v//v0aOXKkihUrpgEDBtzw12jUqJFeeuklBQQEqE6dOpLO/2JXqlQprVy5Um3atLnkbfsu1rVrV40cOVKjRo1S/fr19eOPP+rll19WUFCQ23i1atVSq1atVLlyZeXJk0d79uzRO++8o9q1azu/3F/vtnj8+HE1bNhQnTt3Vrly5RQYGKitW7dq+fLll/2lOFnyCcU333zjFoK0bNlS06ZNU+fOnfXoo48qNjZWL7zwQooTqlmzZmnNmjVq2bKlihcvrvj4eL355puSdNkWNVOnTlVgYKD69eunf//9V0OGDFGdOnX06KOP6uGHH9a2bdt09913K0eOHDp8+LC+/vprhYWFqW/fvsqTJ48GDx6scePGqXfv3nrggQcUHR2tiIiIVF2S0qRJE2XLlk2dOnXSM888o/j4eM2cOVPHjh276rSS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W5fO79gzCEEAAAAAALgFjRkzRh07dtT333+vFi1aqEuXLjp69KgkaeTIkfrxxx/1+eefa8+ePZo5c6by588vSTp16pQaNmyonDlzav369fr666+VM2dO3XvvvTpz5owGDx6sjh076t5779Xhw4d1+PBhhYeHZ+RbTTX6BAEAAAAA4BbUo0cPderUSZI0YcIEvfTSS9qyZYvuvfdeHTx4UNWqVVONGjUknW9Zkmz+/PnKkiWL3njjDblcLknSW2+9pdy5c2vdunVq2rSpAgIClJCQoJCQkBv+vq4HIQgAAAAAALegypUrO//PkSOHAgMDFRMTI0nq27evOnTooB07dqhp06Zq166d05pj+/bt+vXXXxUYGOg2v/j4eP3222837g2kA0IQAAAAAABuMlmyZJGZuQ07e/as22NfX1+3xy6XS0lJSZKk5s2b68CBA1q6dKlWr16tRo0a6fHHH9cLL7ygpKQkVa9eXe+9916K1y1QoICH38mNRQgCAAAAAMBNpkCBAjp8+LDzOC4uTlFRUWmeR48ePdSjRw/Vq1dPQ4YM0QsvvKA77rhDCxYsUMGCBZUrV65LTpstWzYlJiZe13vICHSMCgAAAADATeaee+7RO++8o6+++ko//PCDunfvLh8fn1RPP2rUKH366af69ddftXv3bi1ZskTly5eXJHXp0kX58+dX27Zt9dVXXykqKkpffvmlnn76af3++++Szvch8v3332vv3r36+++/U7RCyawIQQAAAAAAuMkMGzZMd999t1q1aqUWLVqoXbt2KlOmTKqnz5Ytm4YNG6bKlSvr7rvvlo+Pj+bPny9Jyp49u9avX6/ixYurffv2Kl++vHr27KnTp087LUMeeeQRlS1bVjVq1FCBAgW0YcOGdHmfnuayiy8i8kJxcXEKCgrS8ePHL9vUxxPCIsPSbd432q7uuzK6BAAAAABeKD4+XlFRUSpVqpT8/f0zuhzcQFda96k9r6clCAAAAAAA8AqEIAAAAAAAwCsQggAAAAAAAK9ACAIAAAAAALwCIQgAAAAA4KbDPT68jyfWOSEIAAAAAOCm4evrK0k6depUBleCGy15nSd/Bq5FVk8VAwAAAABAevPx8VHu3LkVExMjScqePbtcLlcGV4X0ZGY6deqUYmJilDt3bvn4+FzzvAhBAAAAAAA3lZCQEElyghB4h9y5czvr/loR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9eurUKFCcrlcqlGjhnx8fC457r59+zxaIAAAAAAAgCekKgSZPXu22rdvr19//VVPPfWUHnnkEQUGBqZ3bZKkP/74Q0OHDtXnn3+u06dP6/bbb9ecOXNUvXp1SZKZacyYMZo9e7aOHTumWrVq6ZVXXlHFihVvSH0AAAAAAODmkKoQRJLuvfdeSdL27dv19NNP35AQ5NixY6pTp44aNmyozz//XAULFtRvv/2m3LlzO+NMmTJF06ZN09y5c3X77bdr3LhxatKkifbu3XvDghoAAAAAAJD5pToESfbWW285///999/lcrlUpEgRjxaVbPLkySpWrJjba5YsWdL5v5lp+vTpGjFihNq3by9JioyMVHBwsObNm6c+ffqkS10AAAAAAODmk6qOUS+UlJSksWPHKigoSCVKlFDx4sWVO3duPffccx7vMPWzzz5TjRo19MADD6hgwYKqVq2aXn/9def5qKgoHTlyRE2bNnWG+fn5qX79+tq4caNHawEAAAAAADe3NLcEGTFihObMmaNJkyapTp06MjNt2LBBERERio+P1/jx4z1W3L59+zRz5kwNHDhQw4cP15YtW/TUU0/Jz89P3bp105EjRyRJwcHBbtMFBwfrwIEDl51vQkKCEhISnMdxcXEeqxkAAAAAAGROaQ5BIiMj9cYbb6hNmzbOsCpVqqhIkSLq16+fR0OQpKQk1ahRQxMmTJAkVatWTbt379bMmTPVrVs3ZzyXy+U2nZmlGHahiRMnasyYMR6rEwAAAAAAZH5pvhzm6NGjKleuXIrh5cqV09GjRz1SVLJChQqpQoUKbsPKly+vgwcPSpJCQkIkyWkRkiwmJiZF65ALDRs2TMePH3f+oqOjPVo3AAAAAADIfNIcglSpUkUvv/xyiuEvv/yyqlSp4pGiktWpU0d79+51G/bzzz+rRIkSkqRSpUopJCREq1atcp4/c+aMvvzyS4WHh192vn5+fsqVK5fbHwAAAAAAuLWl+XKYKVOmqGXLllq9erVq164tl8uljRs3Kjo6WsuWLfNocQMGDFB4eLgmTJigjh07asuWLZo9e7Zmz54t6fxlMP3799eECRMUGhqq0NBQTZgwQdmzZ1fnzp09WgsAAAAAALi5pTkEqV+/vn7++We98sor+umnn2Rmat++vfr166fChQt7tLiaNWvqk08+0bBhwzR27FiVKlVK06dP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MpGLf4UzM50+fVq//vqr8uTJ4wwvX768HnroIZ06dcr5lYhWCOkjeUefJUsWRUVFafPmzTp06JASEhLUokUL9evXTytWrNDevXszulSv4+Pjo7/++kv/+c9/1L17d3Xv3l3//vuvatasqW7duikmJkYjR46UxPZxIyR/EXK5XIqKipKZacuWLcqXL5+GDRumo0ePql27djpz5owiIiKUN2/ejC7ZKyQ323/sscfUpEkT1a9fX82aNdP27dtVu3ZtDRgwQNHR0XrxxRczuFLv9cknnygyMlLLli1TrVq1JEmVK1d2WhiOGzdOkmg9lU6Sw6XkfVeZMmU0cOBAdezYUZMmTXJr9TF27FiFhobqv//9r6KjozOqZK+VlJSkb7/9VsOGDVO5cuX04Ycfaty4cWrXrp06duzIsf4GMDPnuPLKK69o+PDhWrJkiXx9fVWyZEm98847mj9/vj788EPu1JeBhg4dqooVK+q7775Tu3btVKBAAXXo0EHDhw/X9OnT9dVXX3l9aMgRNZO4sAOumJgYSf/XnDwxMVEJCQk6d+6cc7Bu1aqVzp49qyNHjmRYzd4geZ2MHDlS4eHhevTRR9WiRQsNGzZMkjR16lQVKlRIzz77LM1jb7DVq1erfPnyOnXqlGrUqKEDBw6obdu2Wr58uVq1aqUOHTpo8eLFWrx4sXO96tKlS71+p58eLvxV6Pnnn1fTpk21fft2JSYmqkiRIlqwYIHKly8vf39/bdy4UR06dNCff/6p33//XRKddKUXM9OJEyd03333aceOHZozZ46WLl2qhIQE9e7dWz/88IPatm2rFi1a6I033tC2bducYw4873LL9eGHH9b999+vuLg4bd682RneokULtW7dWrt27dLMmTNvVJleJzlc2rhxo15//XV17txZ3333nRYsWKCcOXNqxYoVzvcy6XxotW3bNk2fPl0nT57MqLK9jsvlUmxsrHbv3q3Q0FA98cQTeuyxxzRy5Eh98MEHKlCggPbt26d///03o0u9pblcLv37779q3769Jk2apK1bt+o///mPpk+frqNHj6pBgwYaMGCAIiIitGPHDknSsWPHtG7duowt/BZ2qWPL5MmTVbFiRf3+++86e/asM3zUqFEKDQ3V1KlT+QHXkGn88MMPVrNmTatUqZL17t3bduzYYWZmr7zyivn7+9vGjRvdxm/QoIFFRERkRKleISkpyczMJk6caKGhobZ69Wo7e/asvfXWW+ZyuezFF180M7MtW7aYr6+vvfTSSxlYrffp0aOHDRgwwHk8YsQIy5Ytm33wwQdmZvbTTz9Zt27dLE+ePHbfffeZy+WyxYsXZ1S5t7xjx47ZihUrrFWrVrZy5UozM3vjjTescOHCFhQUZK+88orb+FOmTLHhw4dnRKleZf/+/VajRg375ZdfzMxs3bp1FhgYaD179rTY2FgzM9u6dau1adPG7rrrLjt37lxGlnvLSkxMdP6/aNEi++9//2uRkZG2a9cuMzPbvXu3tWzZ0tq0aWMHDx50xj106JB1797dQkNDLSoq6kaXfcu6cH2YmX344YdWtGhRK168uK1du9YZPmPGDCtVqpRFRka6TTN16lS7/fbb7dixYzeoYu+0dOlSe/fdd+3QoUPOvqlVq1bmcrmsXr169vPPPzvj7ty50x577DFnX4f0sX79eps8ebI99thj9tdff5mZ2fjx461WrVo2ZcoUZ7xq1apZ1apV7YknnrCcOXNa7969M6rkW9aF+6SYmBjbsmWL7d+/386cOWNmZl9//bW5XC576aWXLD4+3hl3//79ljdvXnv00Uftn3/+ueF1ZxaEIBnowi+bJ0+etKZNm9qQIUNs0qRJVr9+fatataolJCSYmVmTJk2sfPny9uqrr9pPP/1kzz//vBUoUMDWrVuXUeXfki4+ATh79qw1bNjQ3nzzTTMz27x5s5UqVcoaN25se/bsccabOHGiuVwu27Jlyw2t1xtc/GX13LlzdujQIStbtqwdPHjQDh06ZDVr1rTbbrvNOflOduDAAXv++eftiSeesOjo6BtZtlc5ffq0hYWFWfHixa1Lly7O8LNnz1rdunWtfv36tm3bNjM7vz5ff/11u/322+2NN97IqJJvOclfei729ttv2x133GFmZt26dbO8efO6BbbJJ3FvvvmmtWjRwvbv3+8EwLh2J06cSHE8SUpKsk6dOlmePHmsadOmdtttt1n+/Pntm2++MTOzBQsWWO3atW3gwIFu03399dduJ+a4PmfPnnX+/+OPPzr/79u3rwUFBdm7777rNv59991ndevWTfFDFNtJ+jl37px16dLFcufObcWLF7eyZcvaokWLzMzsnXfesdKlSzs/AiYmJtrff/9tDz74oN1zzz22f//+jCz9lnLxZ/z48eNWo0YNy5Url/Xr188ZHh8fbw8//LA1bNjQli5dambnT7SfeOIJu/fee1NsU7g+Fx9bXn31VcuTJ4+FhYVZnjx5bMCAAfb777+bmdnAgQMtb968tmHDBjP7v3X60ksv2dNPP31D685sCEEy2LFjx+zbb7+1DRs2WPfu3Z0P9oYNG6xixYrWuXNnMzNLSEiwLl26WIkSJax8+fJWpEgRftX2oMTERGfHcObMGTt58qSZmR05csQaNmxomzZtshEjRljOnDlt1KhRzgnHL7/84pykt2zZklDKwy4OCi902223WYcOHSx//vzWtWtX+/vvv83MLDY21t555x07fPhwivld+OUX1+bCbeVCH330keXIkcNatWrltt6++eYbq1u3rhUqVMiaN29ujRo1sly5ctl77713I8u+Jc2dO9eWLFniNmz79u22e/duZx3t3bvXgoKCLE+ePNawYUP77rvvnHEXL15s06ZNM7PzQRauX1JSkq1atcqKFi1qBw4ccHvu448/ttDQUPvpp5/M7Py+6r777rMyZco4Ie3w4cOtTp069tZbb112/rg2Fy67U6dOWceOHe2OO+5wjttRUVFWt25d69Spk1trgsOHD1vZsmXtwQcfdE4skL4OHjxoDzzwgEVHR9uff/5pLVq0sEaNGtmGDRssPj7exo0bZ1mzZrWGDRta9+7drXjx4la3bl2ndRuu3+W+L61cudJCQ0OtTZs2bq0Ldu7caY0aNbKuXbs6rdbi4+P53uUh+/bts/vvvz/F8Pnz51uhQoXsnXfesX379tkLL7xgd911l7Vs2dIZp1KlStasWTP2XxchBLnBLtwZzJs3z3LlymXFixe3ChUqWMeOHZ3n4uPjLTIy0oKCgiwyMtLMzOLi4uzIkSO2adMmp4VIUlISX4qu04XLb/HixVa5cmUbN26cM6xChQoWEBBglStXtq+++soZHhUVZYMHD3Z+xWM9eM6Fy3LXrl3WtGlTu/fee238+PG2c+dOMzt/+Uv27Nlt0qRJbtMuWbLEGjVqZN9++63b8ItblCDtLgw3tm7daosXL3Zbzo8//rjddtttzi9ByQ4ePGhvvPGGTZgwwUaNGuU0ocW1i46OtrJly1rnzp3tjz/+MDOzZs2aWdGiRS0oKMgGDRpkP//8syUkJFiPHj2sUKFCbl+A/v77b2vXrp317NnTjh8/nlFv45a1fPnyFMP69Oljd999t5n937Z09uxZCwkJcVp//Pbbb9a8eXNr2LChE+zi2r3zzjspWghu2bLFChUqZC1btrT169e7XVLx7rvvWrVq1SwiIsKtddXcuXOte/fubid98LxRo0bZoEGDbPTo0TZ06FBn+O7duy08PNy6d+/u/MCxePFie+aZZ6x///60KvSwC78vTZ482caMGWP/+9//nHOYcePGWbVq1WzOnDlu082dO9dCQ0Nt1KhRN7Reb/D555/biBEjzMx9/fTu3dtatWrlNu5HH31kt912m02fPt3MzH799VdzuVw2ePBg5/wRhCAZIjEx0X777Tdr3bq1vf/++7ZkyRLr0qWLBQYGOl9mzc5f3/X0009boUKF7NChQynmw7XbntW/f38LDAy0SZMm2RdffOG0PFi6dKm5XC57/fXXnXFPnz5tffr0sfr169vevXszquRb3ldffWWlSpWy7t2725NPPmlhYWFWpUoV+/HHH23v3r3OZWPbtm2zHTt22LRp0yxPnjw2evTojC79lta7d28rUqSIValSxSpWrOgEuAkJCXbHHXdYx44dnV+74XnJIeG8efPsjjvusPHjx9uUKVPsgQcesD179tiMGTOsatWq1rdvXzt16pRt3LjRatSoYZUqVbKIiAh78cUXrWjRonbPPffY0aNHM/jd3Pwu/EJ64UnyTz/9ZO+9955zLJkwYYLddtttKcZ94YUXrFy5ck4Y9dVXX9m+fftuROm3tH379lnLli2dflfMzodO/fv3t0ceeeSy0w0cONDCw8NtwYIFN6JM2Pkf+erXr2/ly5e3OnXqmMvlsjZt2riN8+abb1rVqlVt0qRJbt9/+QEqfezevdvKlCljd955p3Xs2NGqVq1qtWvXtj///NPi4+OtXbt21rx5c+cyi2RTp07l8uN0cOFxJvmSr4SEBOvTp4/bj+hm53/k6Nq1qz388MN26tQpMzvfv9Hs2bNvXME3AUKQGywpKclatGhhOXPmtPvvv9/5UEdHR1v16tWtWbNmbuPv3LnTQkND7dlnn82Icm9ZyQfQ5IPnzp07rUaNGikuZ0n+kvrEE09YcHCw1a9f30aMGGEVKlSwChUqEICkk3///deGDx9ujz32mP33v/91hm/bts3atm1r9erVM7PznQnffffdFhwcbGFhYXbbbbfZp59+6ozPlyPPGz16tFWtWtW5ln7VqlVuIeG6deusSJEiNmHCBKfDLdaDZ114ot2/f3+rV6+ehYeH2+rVq53hU6dOtZo1a9r//vc/MzvfP85DDz1kTZs2tSZNmtjUqVNveN23sku1ppkwYYK5XC5bv369mZktW7bMqlevbpMnT3Ybb8iQIdagQYMU/brQeu3abNmyxWltlvyr559//ukc9xs3buw0FX/ppZesf//+Vq5cOevWrZv9/fffdvToUbvnnnusfv36bq1EkD7effddGzhwoPXv39/OnTtnZ86csaFDh1rVqlVT9CXxxBNPWFhYmNMBOtJPnz59rFu3bs7jyMhIc7lcTji4efNmq1Wrlj3xxBOXvPwYnnFh4HfmzBkbMGCA5c2b1xk2aNAgq1KlitNKOlmXLl2sfv36N6rMmxIhSDpKSkq65JeYbdu2Wf78+a1ly5Zul7WsW7fO/P39bcaMGc64iYmJ9uuvv96wmr1N8helTz75xFwul/3zzz+2efNmmz59uj300ENWv35958Tigw8+sN69e1vfvn1t7NixGVn2Lefi7eT06dNWokQJc7lcNnHiRGd4UlKSLVmyxMqVK+dcJpaUlGQHDx607du3u21PnEB43smTJ61WrVr22Wefmdn5jhwLFy5s7dq1c2vFNnLkSCtYsCC/pHrYhAkT7IcffjCz8yd6n332mZ04ccKaNWtmAQEBbiFuQkKCPfzww1a/fn3n0ozkbeLff/+98cXfwr7//nurXLmyrVy50hITE61Fixa2bNkyMzMLDw+3OnXqWExMjJ08edIGDBhgFStWtPfff9+OHTtmhw8ftrp169pTTz1FWOgBX3/9tZUvX96GDBniDFuxYoXVqlXLOaH+4IMPLCQkxHLkyGGNGze23r1728yZM83Pz8/Gjx9vZucvq5w5c2aGvAdvcuTIEevUqZPlzJnTnnjiCWd4VFSUPfjgg9akSRPbvXu3M/zgwYPWuXNnfoDyoEt9Vzp06JAVLVrU+bHjoYcesvz586e4y9u0adOsaNGizs0D4FkXBiBxcXFmZrZ27VorV66cc7edEydOWJEiRaxnz55OX0ZnzpyxDh06OJfP4NIIQdLJhTuVw4cP2759+9x+KXrhhRfM39/f6U/C7PyHdtKkSebj4+PWfDMZl794TvIvDU2bNnVOmCtXrmyFCxe2kJAQ69y5sz3++OPWqFEjq1KlilsfBnTy5DlXCis2bNhgefPmtR49erg12T9+/LhVrlzZCQsv3i7YTq5d8rq43DKMj4+3+vXr2/z5861v376WJ08ety9F27dvd/7/0EMPuX15xfU5duyY3X333VapUiUbPny4uVwue/nll83MbM2aNVahQgV76qmn3G53991331mzZs2sdevWKTrphOfs27fPevbsaaGhoRYQEGAdOnRw9lm///67ZcuWzenfYN++fTZo0CBzuVwWFhZmBQoUsHvvvZe+JjwkISHBBgwYYHXr1rVPPvnEzM6fONerV88efPBB5+T5+++/t/Xr19vff/9tJ06cMDOztm3b2jPPPJNRpXutdevW2V133WXh4eFuw5cuXWoNGjSwxx57jON6Ornw++yFIWx8fLw1aNDAhg8fbmXLlrW6des6x/NTp065/cAxZ84cAtx0dODAAWvdurWNGzfOYmNj7cyZMzZ79mzLlSuXffjhh2Z2PrQtW7aslS1b1vr27Wvh4eFWrFixS55L4v8QgqSzCRMmWHBwsJUvX965JWTyr9X33HOP1ahRw+0E76+//rI6derYiy++mEEV35oudQCdMmWK1ahRw55//nkzMzt69KhFRkba7t277eDBg2Z2/kS8ePHi9KicDi48aK5atco6dOhgDz/8sH300UfONfTDhw+32267ze1OIsmBVfJ6g2dMmDDBBg4c6LZePv30U/vggw+cWz8fPXrU7r33XgsMDLSaNWu69VsQFRVl999/v23atOmG134ru3g7cblclj9/fre7vJiZRUREWM2aNd36LjIze+WVV6xdu3aEIOmsU6dO5nK5nI5Pzf7vsqXXX3/dsmbN6nZHtw0bNtjSpUvt888/d4Zxond9kkPcPXv2WLt27axly5bOL6OffvqpVatWzYYOHer8omr2f7eWfvPNN6148eIpOnWGZ8XHx9vcuXPt008/dbs98RtvvGHlypWzF154wW38yZMnW+nSpe2111670aV6jVOnTtljjz1mQ4YMcS4z+ueff+zBBx+0gIAA69u3r9v4mzdvtnr16tmOHTsyolyv8vbbb1tgYKB16tTJVq5c6ZwvHjp0yB555BErXLiwc0ekLVu22Lhx46xXr17Wv39/WkOnAiGIByV/4JK/tD733HNWrFgx++ijj2zTpk328MMPW9WqVZ1OG/fv32+5c+dO0d9H8q8S8Kwz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" alt="Output" />
</div>
</div>
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">
saved -&gt; blocked_reason_by_state.png
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 8 — Authoritative five-reason × <code>mentorshipState</code> classification of all 552,377 <code>no_row</code> users</h2><br><br>This cell produces the authoritative reason-by-state table for the entire <code>no_row</code> population. Each user is assigned exactly one of the five reasons, in this precedence order: <code>5_deleted</code> if <code>reg_ts</code> is missing; otherwise <code>1_pre_rollout</code> if <code>reg_ts < 2021-06-01</code>; otherwise <code>2_autocreated</code> if <code>is_self == False</code>; otherwise <code>3_indef_blocked</code> if the user is in the indef-blocked set from cell 7; otherwise <code>4_residual</code>. The result is cross-tabulated against <code>mentorshipState</code>.<br><br>Printed reason × <code>mentorshipState</code> totals:<br><br>| reason | 0 | 50 | unset | total |<br>|---|---|---|---|---|<br>| 1_pre_rollout | 0 | 0 | 524,323 | 524,323 |<br>| 2_autocreated | 0 | 0 | 0 | 0 |<br>| 3_indef_blocked | 11,409 | 4 | 9,561 | 20,974 |<br>| 4_residual | 165 | 0 | 464 | 629 |<br>| 5_deleted | 26 | 0 | 6,425 | 6,451 |<br><br>A sum check inside the cell confirms the column sums match <code>no_row</code> per state (0: 11,600; 50: 4; unset: 540,773; total 552,377). The figure is saved to <code>no_row_reason_by_state.png</code> and the table to <code>no_row_reason_by_state.tsv</code>.<br><br>Two observations from this table are used downstream: reason 1 (pre-rollout) is entirely within <code>unset</code>, consistent with state <code>0</code> not appearing in the data before 2021-09; indefinitely-blocked users are concentrated in state <code>0</code> (11,409) and state <code>unset</code> (9,561), with only 4 in state <code>50</code>.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [51]:</div>
<div class="cell-content">
<div class="input-area"><pre>
# =============================================================================
# Classify ALL no_row users (state 0 + 50 + unset) into the 5 reasons, by state.
# Reuses what earlier cells already built:
# - ds["no_row"], ds["reg_ts"], ds["is_self"] (from cell-6)
# - block_status.jsonl -&gt; indef_uids (from cell-9; covers all states,
# since the remainder was NOT
# filtered by state)
# Priority (high -&gt; low): 5_deleted &gt; 2_autocreated &gt; 1_pre_rollout
# &gt; 3_indef_blocked &gt; 4_residual
# =============================================================================
import matplotlib.pyplot as plt
ROLLOUT_LIVE = pd.Timestamp("2021-06-01")
# ---- indefinitely-blocked uids (covers the 50 &amp; unset remainders too) ----
blk = pd.read_json(ROOT / "analysis/diagnose_missing_mentors/block_status.jsonl",
lines=True)
indef_uids = set(blk.loc[blk["indefinite"], "uid"])
print(f"indefinitely-blocked uids in block_status: {len(indef_uids):,}")
# ---- all no_row users (should be 11,600 + 4 + 540,773 = 552,377) ----
nr = ds[ds["no_row"]].copy()
print(f"total no_row users: {len(nr):,}")
print(nr.groupby("mentorshipState").size().to_string(), "\n")
# ---- vectorized classification (assign low priority first, overwrite upward) ----
reason = pd.Series("4_residual", index=nr.index, dtype="object")
reason[nr["userId"].astype(int).isin(indef_uids)] = "3_indef_blocked"
reason[nr["reg_ts"] &lt; ROLLOUT_LIVE] = "1_pre_rollout"
reason[nr["is_self"] == False] = "2_autocreated"
reason[nr["reg_ts"].isna()] = "5_deleted"
nr["reason"] = reason
REASON_ORDER = ["1_pre_rollout", "2_autocreated", "3_indef_blocked",
"4_residual", "5_deleted"]
# ---- reason x state table ----
tab = (nr.pivot_table(index="reason", columns="mentorshipState",
aggfunc="size", fill_value=0)
.reindex(REASON_ORDER, fill_value=0))
tab["total"] = tab.sum(axis=1)
print("=== reason x mentorshipState ===")
print(tab.to_string())
print(f"\nsum check: {tab['total'].sum():,} (should equal total no_row above)")
tab.to_csv(ROOT / "analysis/diagnose_missing_mentors/no_row_reason_by_state.tsv",
sep="\t")
# ---- plot (state 0 included; mostly so we see 50 &amp; unset clearly) ----
plot_tab = tab.drop(columns="total")
ax = plot_tab.plot(kind="bar", stacked=True, figsize=(10, 6), logy=True)
ax.set_xlabel("reason")
ax.set_ylabel("number of no_row users (log scale)")
ax.set_title("Why no_row — reason x mentorshipState (all states)")
ax.legend(title="mentorshipState")
plt.xticks(rotation=25, ha="right")
plt.tight_layout()
plt.savefig(ROOT / "analysis/diagnose_missing_mentors/no_row_reason_by_state.png",
dpi=130)
plt.show()
print("saved -&gt; no_row_reason_by_state.png + no_row_reason_by_state.tsv")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">indefinitely-blocked uids in block_status: 20,974
total no_row users: 552,377
mentorshipState
0 11600
50 4
unset 540773
=== reason x mentorshipState ===
mentorshipState 0 50 unset total
reason
1_pre_rollout 0 0 524323 524323
2_autocreated 0 0 0 0
3_indef_blocked 11409 4 9561 20974
4_residual 165 0 464 629
5_deleted 26 0 6425 6451
sum check: 552,377 (should equal total no_row above)
</div>
</div>
</div>
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<img class="output-image" src="data:image/png;base64,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fSi/nJTndu/e3aV9+PDhJsni4uLMzGzTpk2XXS8l2L766qtpeVlc9tm+fXuXdnf2UbhwYevUqZOZXfignTVrVnvllVdMkv39999mdiGA+fv724kTJ9JcW3oqWrSo+fr62ubNm13an376acuWLZuzzhQjR440SS7h8GJJSUl2/vx5Gzx4sOXJk8eSk5PNzOzrr782SbZ27dor1jJ27FiTZNOmTXNpf/vtt02SSyBO63l3JVu3brUcOXLY/fffb/PnzzcfHx97/fXXr/m8lNBYqVIlS0pKcraPHj3aJNm9997rsn7Pnj1Nkh07dszMLvwe+fn52XPPPeey3vHjxy1//vz28MMPO9s6dOhw2dejefPmVrp0aefjQ4cOmSQbMGBAqnpr1qxp+fLls+PHjzvbEhMTrUKFCla4cGHnz+dK57uZWbZs2axnz55XfV3q1atnkmzlypUu7eXKlbOmTZs6H18tdPfq1cvluVOmTDFJ9vnnnzvbZs+ebXnz5jVJJsny5MljDz30kH3//fcuz42NjU21nytJTEy0EydOWNasWe29995ztn/11VcmyRYsWOCy/smTJy137typvkxJSkqySpUqWfXq1a+6v5T3iou/tLic5ORkO3/+vC1atMgk2R9//OFcdr2hOy2/h1c7ny6VmJho586ds1KlSrn8/K72+pcpU8aqVKli58+fd2lv2bKlFShQwPl7VaFCBbv//vuvWYOZWe3ata1GjRppWhdAxsTwcgAZVq5cuVSpUiXndd2LFi2Sr6+vateuLUmqV6+ec8je1a7nbtCggbJnz+58HBYWpnz58rkM12zbtq3y5cunmJgYZ9v777+v0NBQPfLII2mq995773V5HBERIUnO/aTUePHQWkmqXr26ypYtm+ahnxdr3bq1y2N39tGoUSPnENzly5fr1KlTeuGFF5Q3b17NmzdP0oUhqinDjK8kOTlZiYmJ1/UvLde5RkRE6M4773RpmzVrlho0aKCCBQu6bK9Zs2aSLpwrKX755RfdfffdCgkJka+vr/z9/dW/f3/Fx8c7h1ZXrlxZAQEB6tq1qyZPnqwdO3akquOXX35R1qxZ1aZNG5f2lNf60p9fWs67K7njjjv08ccfa8aMGWrZsqXq1KnjMvz1Wpo3b+4czixJZcuWlaRUE4SltO/evVuS9OOPPyoxMVHt27d3eV2DgoJUr169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mZycfM1aUvaVwsxStWXNmtXlcbNmzfT3339r9uzZmj9/vho1aqTo6GiNHDnysvVcfDxplfKci2vx9/dXnTp1VKdOHfXp00dDhgzR4MGD9corryggIOCy23nnnXf07rvvavTo0apYsaKyZs2qnj176ty5c1fdf1pf9/RG6AYAAACAm+iuu+7SN998o2LFisnP7/ojmb+/v5KSklzaypYtq6VLl6p9+/bOtuXLl6ts2bLX3F5oaKg6duyojh07qk6dOnrppZdcQre7du/erf3796tgwYKSpBUrVsjHx0d33nnnFZ9Trlw5JSYm6syZMwoICFBAQECqY1yyZInuu+8+PfHEE5IuhOmtW7e6HOPlnpder7u7CN0ZWMXJFa+9EtLFug7rvF0CAAAAMono6Gh9/PHHatu2rV566SXlzZtX27Zt05dffqmPP/5Yvr6+adpOsWLF9PPPP6t27doKDAxUrly59NJLL+nhhx/WXXfdpUaNGmnmzJmaPn265s+ff9Vt9e/fX5GRkSpfvrzOnj2rWbNmpSmoX01QUJA6dOigkSNHKiEhQT169NDDDz+s/PnzS7owO3nbtm1VtWpV5cmTRxs3btSrr76qBg0aKEeOHM5jXLx4sR599FEFBgYqb968uuOOO/TNN99o+fLlypUrl0aNGqUDBw641FusWDGtXLlSu3btUrZs2ZQ7d+50e93dxTXdAAAAAHATFSxYUMuWLVNSUpKaNm2qChUq6Pnnn1dISIh8fNIe0d555x3NmzdP4eHhqlKliiTp/vvv13vvvacRI0aofPny+uijjzRx4kTVr1//qtsKCAhQ3759FRERobp168rX11dffvnljRym7rjjDj344INq3ry5mjRpogoVKujDDz90Lm/atKkmT56sJk2aqGzZsnruuefUtGlTTZs2zbnO4MGDtWvXLpUsWVKhoaGSpH79+umuu+5S06ZNVb9+feXPn1/333+/y7579+4tX19flStXTqGhodq9e3e6ve7ucpiZeWzrt7CYmBjFxMQoKSlJW7Zs0bFjx5zfpmQU9HTfPPR0AwAA3L7OnDmjnTt3qnjx4goKCvJ2ORnCwIEDNWPGDK1du9bbpdyQq/3sExISFBIScs0sedv2dHOfbgAAAACAp922oRsAAAAAAE8jdAMAAAAA0tXAgQMz/NDy9ELoBgAAAADAQwjdAAAAAAB4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ffddnT17VkFBQfrll1+4thsZVsroupT35pQv/Bs1aqQyZcpo0aJF2rt3L+/dyLD8/PzkcDi0atUqtWrVSgkJCZoxY4a3y4IbCN24bg6Hw/kh7YsvvlBoaKhKlCihadOmqXbt2nxwQ4a3aNEilStXTm3atNHnn38uSXrvvfckcekEMq7ly5erRIkSmjJlihYvXqyTJ09qxowZWr16tSR6u5HxpIzcWL58uebOnav4+HiZmQICAtS4cWOdOHFC33zzjSS+VELG9Ntvv6lChQpq3bq13nvvPZ0+fVqffPKJ/v33X2+XhjQidCNNLjc52uzZsxUVFaVvv/1Wb7zxhv766y9t375d3333nZKSkvjghgzhSpP/nThxQiNGjFDlypW1ePFi9ejRQ48//rgmTpyoHTt2cOkEbmlJSUmpwkViYqIkac6cOSpQoICWL1+uYcOGad26dcqePbu+/fZb53BFggluVZc7N2fNmqXy5cvrwQcfVO/evdW0aVNnL2DTpk1VsmRJzZs3T0eOHOGzCW5ZycnJqT6PmJnMTJ988ony58+vP//8UwMGDNB7772n3377TbNnz/ZStXAXnxqRJinfIh89etTZ1rBhQ+XPn1+LFi3SoUOHlC1bNj3wwAMaN26cDh48KIneQNzakpOTnZP/pfxhS/HPP/9ozpw5evbZZ5U3b17VqlVLgwcPVrly5TR06FBJBBPcunx9feVwOLRlyxatXLlSSUlJ8vPzkyT98MMPuvvuuxUQEKDz588rV65c6tu3r3766SetWbNGEr3duHVdem7++uuvGjx4sNq3b69t27bp119/Vc2aNTVixAj9/fffypkzpxo2bKjDhw/r22+/lcRnE9x6kpOT5ePjI19fXyUmJur48eOSLpzvSUlJmjJlih599FHlypVL4eHhevbZZ/XII4/o3Xff1enTp71cPdKC0I1UzMz5ByklVJw7d04NGjTQW2+95fzlzpIli1q3bq2lS5cqNjZWkjRkyBCtXLlSsbGxMjOX3kACCrzharew8/Hx0ZEjR9SjRw81bNhQTz/9tJYvX66kpCSdOnVKJUqUUEJCgqQL52/hwoXVvn17TZkyRYcPHyaY4JZxaYiIjY1VVFSUGjZsqE6dOql58+aaP3++JCk8PNw5lDzled26ddOJEyc0a9YshivilpacnKyPPvpI+/btkyRVrlxZnTp10iuvvKKsWbPqiy++0LRp07RhwwZ99NFHkqR77rlHhQsX1ty5c3X69GlGKsErrvV5JD4+Xt27d1eVKlX0yCOPaOzYsfrnn38kSUWLFnX+PzExUQ6HQ08//bR+//13LViw4KbUjxvDuw5cpAwL9/HxcZkoLSAgQKVKldLSpUv1119/Odfv3Lmzzp8/r0WLFikhIUFly5ZVo0aNNGLECK1evVo//fSTXn/9dUn0nMA7Lr6FXcrw2hS///676tevr/Xr1+vJJ5/U4cOH1b9/f3366acqVKiQ8ufPr2XLlkm6cP76+/srX758Onv2rCZMmCCJL5Nw86ScawsWLHAG45S2i0PEqVOnNHToUFWsWFFr1qxxDr1t27atEhIS1KZNGy1atEi7d+9WYGCgJGnfvn0KCQnR4sWL9euvv97cAwP+v0OHDmnKlCnOcHG5kHLy5Ek988wzmjZtmpKTkxUUFKRu3bpp5cqVioiI0NixYzVw4EA9+uijmjlzpg4dOqSCBQuqfv362rhxo6ZNm3azDwuQdOHzyLlz53T27NlUnx327t2rNm3aaMuWLXrrrbcUFRWl7777Tq+//rr8/PxUtWpV/frrrzp+/Lhz1FJAQIB8fX312Wef6cyZM944JLiB0H2bOn78uAYOHOgyXFy68IYQHx+v5557Tq1atdLgwYP1+++/S5L69Omj3bt3a8GCBc5bKeXNm1dNmjTRzJkztXbtWknS8OHDlZSUpAceeECPPvqoAgICbuqxARdbtmyZwsLCJF2Y/fOvv/5y9pBMnTpVJUuW1C+//KL27durf//++uuvvzRmzBjlzp1b1atX188//+xyf+4dO3aocOHC6tu3r86dO8eXSbhpHA6H1q5dq0aNGmnJkiUuyz7//HMNGDBAkjRz5kz99ttv+uijjxQaGuqcXCo5OVn79+9Xw4YNFRkZqc6dOzuHk8+fP18NGzbU8ePHne/vwM02c+ZMdevWzTl6ztfXV7t27XJ+vkhOTlb27Nn1/PPPa8KECTp8+LCkC+F82LBhqlevnn766Sd1795dRYoU0datW533M27cuLHq1aunkiVLeuXYgN27dytnzpyKjY2Vw+HQ6tWrnaOOvv/+ex07dkzz589XixYt1KZNGx04cECff/65EhIS1LhxY+3Zs8c5ekOSNmzYoBo1amjq1KkuHWK4RRluK6dPnzYzs/3795vD4bCPPvrIZfmvv/5qhQsXtrvvvtsGDRpkpUuXtmLFitmGDRvMzKx9+/ZWv359W7dunfM5ixYtsixZstigQYOc29+7d68tW7bsJh0VcGUnTpywQoUKWbt27SwiIsIKFy5sixcvtoSEBIuKirLFixdbbGysNWrUyLJnz26PP/64/fbbb2Zmtm7dOnv88cctMDDQ+vTpYx06dLDKlStbbGyscx3gZklKSjIzs5o1a9rDDz9s//77r5mZ/fvvv1a1alWbPn26mZmNGTPGHn30URs5cqQVK1bMihUrZiNGjLBDhw45t7VhwwarWLGihYeH25133mnZsmWzlStXOt/DgZspOTnZ+f8qVarYs88+a4cPHzYzs5YtW1qZMmXs7NmzznX2799vfn5+9umnn5qZ2e7du61MmTI2cuRIMzM7e/asde7c2YoXL24lS5a0U6dO3cSjAa6sefPmVrNmTStfvrxly5bNPv/8c0tKSrLOnTvbqFGjbMWKFdawYUPLnj27tW/f3latWmVmZkeOHLERI0aYw+Gw++67zx566CErXLiwrVq1yv766y8vHxXSgtB9G3niiSesW7duduLECTMz6969u1WsWNH5ODk52Z566ilr2bKlnTlzxszM9uzZYw0bNrQGDRqYmdmaNWusaNGiNmrUKEtMTDQzs5dfftnCwsKsRo0aLmE8xfnz513+oAKekpyc7DwvUwLKpk2bzOFwWEBAgL3yyit29OhR5/qVK1e27NmzW758+ezpp5+2zZs3O5cdOnTIed4OHDjQmjVrZi1atLA1a9bctOMBzMwSExOd57OZ2Zw5c8zf398WLVpkZmaff/65lSlTxo4dO2ZmZmPHjrWgoCArWbKkTZw40RISEpzPXbx4se3Zs8fMzOLi4mzGjBk2duxYl0CT8jsE3AwXn9tmZu+8845VqFDBfvrpJzMzW7VqlQUGBtrPP/9sZv8X0B9//HGrVq2anTx50v755x9r06aNlS9f3r766it78skn7cEHH7TZs2c7Ow1S9nPp/gBPuPjzSMrjo0ePWlBQkPn6+lqnTp2c79lmZk8++aQ5HA7Lly+fRUdH29atW53L9u7d6/ysPnXqVHv22WftkUcesd9///3mHRBuGKH7NpDySz9s2DDLkyePMxhv3brV/Pz87Ouvv3auW7t2bevRo4eZ/d8ftqVLl5qPj4/zD9dz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sM8//9zMLnzOOXfunG3fvt1l2Djn9e2J0J1BpQSIlNk9v/jiC5dr+J588km76667rH///rZv3z775JNPrEKFCi7hPGVdrh+BN23ZssWeeOIJq169ui1dutTM/m8CnYtHcJhdGJ3Rtm1b5x9Bswu9JY8//rh98MEHl90+YRuelPL+uX37ditSpIiNGjXKzMy+/vprK1eunDVs2NAGDx7snEF/6dKl5nA4nPfMHjJkiEVGRrqE6enTp1t4eHiq67QvxnmNm+nikBAXF2djx46106dP24cffmiNGzd2no/Hjx+3ihUrWpEiRVJ94ZSibNmy1rdvXzO78Blm6tSpnj8AIA22bNlirVu3tpEjR1pERITVqVPH+UXqyJEjLSAgwHLkyGF169a17777zvl7cfr0aUtOTrZ9+/ZZixYtrFq1apfd/pVue4rbAxfF3EKSkpKUnJzs0mYXXR91MV9fXyUnJysiIkK1atXSl19+qYSEBOe1IG+//bYeeeQRTZgwQQ0aNNBLL72kzp07q3Hjxs5tpKzL9SPwlgkTJqhGjRpKTk5W9+7ddfbsWUnSE088oRIlSmjr1q06duyYc/3evXtrx44dqlatmkaMGKEePXqoevXqOn78uMu5LUnJyckyM+e1hoAnOBwOJScnq0SJEmrYsKHmzZuncePGafTo0Wrbtq3q1KmjsWPHqlu3bjp69Khq166tSpUqaezYsTIzPfTQQwoPD9dDDz2ksWPHatasWXrnnXcUFRWlChUqpNpfyt8EzmvcTD4+PkpISNDMmTNVq1YtLV68WP/++682bNigatWq6fTp0+rUqZMKFSqkPHny6IMPPlBISIgk6dy5c9q7d6/i4+PVr18/ZcmSRW3atJEkRURE6OGHH/bmoQGSpN9//10NGjSQv7+/ChUqpCJFimjp0qVasGCBzExlypRRkSJF9PTTT2vRokW699575ePjowMHDmjYsGFau3atChYsqGeeeUajRo267D58fX35zH0782rkx2Xt27cv1fXYl5PyzfL8+fPN19fXFixYkGqdXbt22YoVK9K7RCDNLr3WNOVb3n/++cciIyOd9xi+dHn//v2tUqVKqYbTbt261bp3726tW7e25s2b2/z58z1YPXDB0aNHXS5puFhKb8fatWutQIECVrp0aeestmYX7rcdERHhvFziu+++Mz8/P+fIjlOnTtnj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" alt="Output" />
</div>
</div>
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">saved -&gt; no_row_reason_by_state.png + no_row_reason_by_state.tsv
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 9 — Re-check the "5_deleted" bucket against the CentralAuth API</h2><br><br>The label <code>5_deleted</code> was assigned in cell 4 to the 6,451 <code>no_row</code> users whose <code>reg_ts</code> is missing. "Missing local registration timestamp" is not the same as "account deleted": a user can have no local en.wiki user row but still have a live global (CentralAuth) account whose home wiki is another project. This cell tests that hypothesis by querying Meta's CentralAuth API (<code>action=query&meta=globaluserinfo</code>) for each of the 6,451 userIds, one at a time (<code>guiid</code> is not batchable), with a 0.4 s pacing between requests. The fetch is resume-safe and writes one JSON record per line to <code>analysis/diagnose_missing_mentors/deleted_global_info.jsonl</code>.<br><br>Printed results:<br><br>- Total records: <strong>6,451</strong>.<br>- Accounts that do not exist globally (<code>missing == True</code>): <strong>0</strong>.<br>- Accounts that exist but are globally locked: <strong>55</strong>.<br>- Hidden accounts: <strong>0</strong>.<br>- API errors or records without a registration timestamp: <strong>11</strong>.<br><br>Registration date distribution among the 6,440 records with a known global registration timestamp:<br><br>- Pre-rollout (<code>reg < 2021-06-01</code>): <strong>6,440</strong> (100%).<br>- In the identifying window (2022-03-07 to 2025-02-16): <strong>0</strong>.<br><br>Top home wikis (out of all 6,451): <code>enwiki</code> 3,154 (48.9%), <code>eswiki</code> 464 (7.2%), <code>frwiki</code> 252 (3.9%), <code>ruwiki</code> 213 (3.3%), <code>ptwiki</code> 204 (3.2%), <code>dewiki</code> 178 (2.8%), with the remainder spread across many other projects.<br><br>Conclusion printed at the bottom of the cell: none of the 6,451 users are actually deleted. They all have a queryable global account; all 6,440 with a known registration date registered before 2021-06-01; zero fall in the identifying window. The <code>5_deleted</code> label is therefore misleading and should be read as "pre-rollout global accounts with no local en.wiki user row" — many because their home wiki is not en.wiki. This misclassification has no effect on the cohort used for 2SLS estimation, because none of these users fall in the identifying window.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [52]:</div>
<div class="cell-content">
<div class="input-area"><pre># =============================================================================
# Re-checking the "5_deleted" bucket — are those 6,451 users actually deleted?
#
# Context: in the reason-by-state cell above we labelled 6,451 no_row users as
# "5_deleted" because their reg_ts is missing from build/registrations.jsonl
# (which is built from en.wiki's LOCAL user table). "Missing local reg" is not
# the same as "account deleted" — the account may simply be a global
# (CentralAuth) account whose home wiki is not en.wiki, in which case it has
# no local enwiki user row but the global account is alive and queryable on
# Meta.
#
# This cell:
# 1. Queries Meta's CentralAuth API (one uid at a time — guiid is not
# batchable) and writes deleted_global_info.jsonl. Resume-safe.
# API reference: https://www.mediawiki.org/wiki/API:Globaluserinfo
# 2. Summarises: where they registered, when, and whether any fall inside
# the 2SLS identifying window (derived from the ROLLOUT table).
#
# NOTE: this cell reads the deleted_uids set from a cache pkl produced in an
# earlier ad-hoc step. If the pkl is missing, recompute it inline:
# deleted = sorted(set(ds.loc[ds["no_row"] &amp; ds["reg_ts"].isna(),
# "userId"].astype(int)))
# =============================================================================
import pickle, time
from urllib.parse import urlencode
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
from collections import Counter
DEL = ROOT / "analysis/diagnose_missing_mentors/cache/deleted_uids.pkl"
OUT = ROOT / "analysis/diagnose_missing_mentors/deleted_global_info.jsonl"
META = "https://meta.wikimedia.org/w/api.php"
UA = "WikiMentorResearch/1.0 (academic; contact: yubozhou@umich.edu)"
SLEEP = 0.4 # match cell-7's pacing
# cohort window derived from the ROLLOUT table (identifying phases only)
_ident = [(s, e) for label, s, e, mp, hp, ident in ROLLOUT if ident]
COHORT_START = min(s for s, _ in _ident)
COHORT_END = max(e for _, e in _ident)
ROLLOUT_LIVE = "2021-06-01" # en.wiki mentorship effective date (same as cell-4)
print(f"cohort window (from ROLLOUT identifying phases): {COHORT_START} .. {COHORT_END}")
# ---- 1) fetch (resume-safe; skips uids already in OUT) -----------------------
def fetch_one(uid):
p = {"action":"query", "meta":"globaluserinfo", "guiid":uid, "format":"json"}
url = META + "?" + urlencode(p)
for k in range(5):
try:
req = Request(url, headers={"User-Agent": UA})
with urlopen(req, timeout=30) as r:
return json.loads(r.read().decode())
except (HTTPError, URLError, TimeoutError):
time.sleep(0.5 * (2**k))
return {"error": "fail"}
deleted = sorted(pickle.load(open(DEL, "rb")))
done = set()
if OUT.exists():
with open(OUT) as f:
for line in f:
try: done.add(json.loads(line)["uid"])
except: pass
todo = [u for u in deleted if u not in done]
print(f"total={len(deleted):,} already_fetched={len(done):,} to_fetch={len(todo):,}")
if todo:
with open(OUT, "a") as fout:
for i, uid in enumerate(todo):
d = fetch_one(uid)
gu = d.get("query", {}).get("globaluserinfo", d)
rec = {"uid": uid, "name": gu.get("name"), "home": gu.get("home"),
"registration": gu.get("registration"),
"missing": "missing" in gu, "locked": "locked" in gu,
"hidden": "hidden" in gu,
"err": d.get("error") or gu.get("error")}
fout.write(json.dumps(rec) + "\n")
if i % 200 == 0:
fout.flush()
print(f" {i:,}/{len(todo):,}")
time.sleep(SLEEP)
print("fetch done.")
# ---- 2) summarise ------------------------------------------------------------
rows = [json.loads(l) for l in open(OUT)]
print(f"\ntotal records: {len(rows):,}")
n_missing = sum(1 for r in rows if r.get("missing"))
n_locked = sum(1 for r in rows if r.get("locked"))
n_hidden = sum(1 for r in rows if r.get("hidden"))
n_err = sum(1 for r in rows if r.get("err"))
n_no_reg = sum(1 for r in rows if not r.get("registration"))
print(f" globaluserinfo MISSING (account never existed globally): {n_missing:,}")
print(f" locked (account exists but globally locked) : {n_locked:,}")
print(f" hidden : {n_hidden:,}")
print(f" API errors / no registration timestamp : {n_err:,} / {n_no_reg:,}")
# robust date parsing (MediaWiki returns ISO 8601; coerce defensively)
reg_dt = pd.to_datetime(
pd.Series([r.get("registration") for r in rows]),
errors="coerce", utc=True,
).dt.tz_localize(None)
reg_date = reg_dt.dt.date.astype("string")
cs, ce, rl = pd.Timestamp(COHORT_START).date(), pd.Timestamp(COHORT_END).date(),pd.Timestamp(ROLLOUT_LIVE).date()
valid = reg_dt.notna()
n_pre = int(((reg_dt.dt.date &lt; rl) &amp; valid).sum())
n_btw = int(((reg_dt.dt.date &gt;= rl) &amp; (reg_dt.dt.date &lt; cs) &amp; valid).sum())
n_in = int(((reg_dt.dt.date &gt;= cs) &amp; (reg_dt.dt.date &lt;= ce) &amp; valid).sum())
n_post = int(((reg_dt.dt.date &gt; ce) &amp; valid).sum())
print("\n--- registration vs cohort window ---")
print(f" pre-rollout (reg &lt; {ROLLOUT_LIVE}) : {n_pre:,}")
print(f" rollout..cohort ({ROLLOUT_LIVE}..{COHORT_START}) : {n_btw:,}")
print(f" IN cohort window ({COHORT_START}..{COHORT_END}) : {n_in:,}")
print(f" after cohort end (&gt; {COHORT_END}) : {n_post:,}")
yrs = Counter(d.year for d in reg_dt.dropna().dt.date)
print("\n--- registration year distribution ---")
for y in sorted(yrs):
print(f" {y}: {yrs[y]:,}")
homes = Counter(r.get("home") for r in rows if r.get("home"))
print("\n--- top 10 home wikis ---")
for w, c in homes.most_common(10):
print(f" {w}: {c:,} ({c/len(rows)*100:.1f}%)")
print("\n=== conclusion ===")
print(f"None of the {len(rows):,} 'deleted' uids are actually deleted; all are queryable")
print(f"on CentralAuth. All {n_pre:,} with a known registration date registered BEFORE the")
print(f"mentorship rollout ({ROLLOUT_LIVE}), and 0 fall inside the identifying window")
print(f"({COHORT_START}..{COHORT_END}). They were tagged '5_deleted' only because the local")
print(f"en.wiki user table does not have their registration row — many are global accounts")
print(f"whose home wiki is not en.wiki ({homes.get('enwiki',0)/len(rows)*100:.1f}% are enwiki-home,")
print(f"the rest are eswiki/frwiki/etc). The '5_deleted' label is misleading — these are")
print(f"pre-rollout global accounts without a local enwiki user row.")
</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">cohort window (from ROLLOUT identifying phases): 2022-03-07 .. 2025-02-16
total=6,451 already_fetched=6,451 to_fetch=0
total records: 6,451
globaluserinfo MISSING (account never existed globally): 0
locked (account exists but globally locked) : 55
hidden : 0
API errors / no registration timestamp : 11 / 11
--- registration vs cohort window ---
pre-rollout (reg &lt; 2021-06-01) : 6,440
rollout..cohort (2021-06-01..2022-03-07) : 0
IN cohort window (2022-03-07..2025-02-16) : 0
after cohort end (&gt; 2025-02-16) : 0
--- registration year distribution ---
2015: 1,440
2016: 4,971
2017: 29
--- top 10 home wikis ---
enwiki: 3,154 (48.9%)
eswiki: 464 (7.2%)
frwiki: 252 (3.9%)
ruwiki: 213 (3.3%)
ptwiki: 204 (3.2%)
dewiki: 178 (2.8%)
arwiki: 167 (2.6%)
commonswiki: 159 (2.5%)
zhwiki: 148 (2.3%)
jawiki: 127 (2.0%)
=== conclusion ===
None of the 6,451 'deleted' uids are actually deleted; all are queryable
on CentralAuth. All 6,440 with a known registration date registered BEFORE the
mentorship rollout (2021-06-01), and 0 fall inside the identifying window
(2022-03-07..2025-02-16). They were tagged '5_deleted' only because the local
en.wiki user table does not have their registration row — many are global accounts
whose home wiki is not en.wiki (48.9% are enwiki-home,
the rest are eswiki/frwiki/etc). The '5_deleted' label is misleading — these are
pre-rollout global accounts without a local enwiki user row.
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 10 — Block-reason breakdown for all 20,974 indefinitely-blocked <code>no_row</code> users, split by state</h2><br><br>This cell repeats the block-reason analysis from cell 11 on the full population of 20,974 indefinitely-blocked <code>no_row</code> users (rather than the 373 question-askers). Block-reason text is read from <code>block_status.jsonl</code> and bucketed using the same string-matching rules as cell 11. The outputs are saved to <code>block_reason_by_state_all.png</code>, <code>block_reason_by_state_all.tsv</code>, and <code>block_reason_share_by_state.tsv</code>.<br><br>Printed totals (top categories, absolute counts by <code>mentorshipState</code>):<br><br>| category | 0 | 50 | unset | total |<br>|---|---|---|---|---|<br>| spam/promo | 4,614 | 0 | 3,643 | 8,257 |<br>| checkuser | 1,672 | 3 | 1,626 | 3,301 |<br>| sockpuppet | 1,249 | 0 | 1,108 | 2,357 |<br>| vandalism | 1,251 | 0 | 1,104 | 2,355 |<br>| not-here | 891 | 0 | 666 | 1,557 |<br>| other | 603 | 0 | 474 | 1,077 |<br>| username | 519 | 0 | 357 | 876 |<br>| disruption | 452 | 1 | 388 | 841 |<br><br>Within-state shares are also printed. The composition is similar in state <code>0</code> and state <code>unset</code>: in both, the top three categories (spam/promo, checkuser, sockpuppet) account for roughly two-thirds of indefinite blocks. State <code>50</code> has only 4 indefinitely-blocked users and is too small to interpret.<br><br>This cell concludes the analysis of the 552,377 <code>no_row</code> users. The remaining cells are a separate completeness audit of registration timestamps, prompted by a finding made while building the for-Martin output file.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [53]:</div>
<div class="cell-content">
<div class="input-area"><pre># =============================================================================
# Block reasons for ALL 20,974 indef-blocked no_row users, split by
# mentorshipState (0 / 50 / unset).
#
# cell-11 only bucketed the 373 indef-blocked who had also asked a question —
# too small to generalise from. This cell runs the same bucket function over
# the full block_status.jsonl set, so we can see whether state=0 vs unset have
# different abuse-reason mixes.
# =============================================================================
import matplotlib.pyplot as plt
blk = pd.read_json(ROOT / "analysis/diagnose_missing_mentors/block_status.jsonl",
lines=True)
blk = blk[blk["indefinite"]].copy()
print(f"indefinitely-blocked uids: {len(blk):,}")
# attach mentorshipState
uid2state = dict(zip(ds["userId"].astype(int), ds["mentorshipState"]))
blk["mentorshipState"] = blk["uid"].map(uid2state)
print("by state:")
print(blk.groupby("mentorshipState").size().to_string())
# same bucket function as cell-11
def bucket(text):
t = (text or "").lower()
if "checkuser" in t: return "checkuser"
if "sock" in t: return "sockpuppet"
if "spam" in t or "advertis" in t or "promot" in t or "paid" in t: return "spam/promo"
if "username" in t or "ublock" in t: return "username"
if "vandal" in t or "voa" in t: return "vandalism"
if "nothere" in t or "not here" in t: return "not-here"
if "disrupt" in t: return "disruption"
if "harass" in t or "personal attack" in t or "npa" in t: return "harassment"
if "lta" in t or "long-term abuse" in t: return "LTA"
if "block evasion" in t or "evasion" in t: return "block-evasion"
if t.strip() == "": return "(empty)"
return "other"
blk["cat"] = blk["reason"].map(bucket)
# absolute counts: category x state
tab = blk.pivot_table(index="cat", columns="mentorshipState",
aggfunc="size", fill_value=0)
tab["total"] = tab.sum(axis=1)
tab = tab.sort_values("total", ascending=False)
print("\n=== block reason category x mentorshipState (absolute counts) ===")
print(tab.to_string())
# within-state shares (column-wise %): lets you compare state-0 vs unset mixes
share = (tab.drop(columns="total")
.div(tab.drop(columns="total").sum(axis=0), axis=1)
.mul(100).round(2))
print("\n=== same table, as within-state share (%) ===")
print(share.to_string())
# save
tab.to_csv(ROOT / "analysis/diagnose_missing_mentors/block_reason_by_state_all.tsv", sep="\t")
share.to_csv(ROOT / "analysis/diagnose_missing_mentors/block_reason_share_by_state.tsv",sep="\t")
# stacked bar (absolute, log scale so state=50's tiny count doesn't disappear)
plot_tab = tab.drop(columns="total")
ax = plot_tab.plot(kind="bar", stacked=True, figsize=(11, 6), logy=True)
ax.set_xlabel("block reason category")
ax.set_ylabel("number of indef-blocked no_row users (log scale)")
ax.set_title("Block reasons for ALL indef-blocked no_row users, by mentorshipState")
ax.legend(title="mentorshipState")
plt.xticks(rotation=35, ha="right")
plt.tight_layout()
plt.savefig(ROOT / "analysis/diagnose_missing_mentors/block_reason_by_state_all.png",dpi=130)
plt.show()
print("\nsaved -&gt; block_reason_by_state_all.{png,tsv} + block_reason_share_by_state.tsv")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">indefinitely-blocked uids: 20,974
by state:
mentorshipState
0 11409
50 4
unset 9561
=== block reason category x mentorshipState (absolute counts) ===
mentorshipState 0 50 unset total
cat
spam/promo 4614 0 3643 8257
checkuser 1672 3 1626 3301
sockpuppet 1249 0 1108 2357
vandalism 1251 0 1104 2355
not-here 891 0 666 1557
other 603 0 474 1077
username 519 0 357 876
disruption 452 1 388 841
LTA 54 0 76 130
block-evasion 59 0 61 120
harassment 37 0 45 82
(empty) 8 0 13 21
=== same table, as within-state share (%) ===
mentorshipState 0 50 unset
cat
spam/promo 40.44 0.0 38.10
checkuser 14.66 75.0 17.01
sockpuppet 10.95 0.0 11.59
vandalism 10.97 0.0 11.55
not-here 7.81 0.0 6.97
other 5.29 0.0 4.96
username 4.55 0.0 3.73
disruption 3.96 25.0 4.06
LTA 0.47 0.0 0.79
block-evasion 0.52 0.0 0.64
harassment 0.32 0.0 0.47
(empty) 0.07 0.0 0.14
</div>
</div>
</div>
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<img class="output-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABEEAAAJOCAYAAABY5xk7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADP5UlEQVR4nOzdeXxMZ///8ffISkKCxE7sS4g1WksRVbFTS/VWJbTaqqjauihKlVJq6V2xdVHdtdXq3VKEWlrUrpZYqsRSIRU01iC5fn/0l/kaCZ1hJiPyej4eeTDXOXPOe645M5n55DrXsRhjjAAAAAAAAO5xudwdAAAAAAAAICtQBAEAAAAAADkCRRAAAAAAAJAjUAQBAAAAAAA5AkUQAAAAAACQI1AEAQAAAAAAOQJFEAAAAAAAkCNQBAEAAAAAADkCRRAAAAAAAJAjUAQB4DIffvihLBaLzU9wcLAiIiL0ww8/ZFjfYrFo9OjRLskSHx8vi8Wit956yyXbz8lGjBihUqVKydPTU4GBgVm238GDB8tisaht27aZLrf3OS9duvRNt3Er6cd3fHy8w/e9mVWrVslisWjVqlW3df/58+eratWqyp07tywWi7Zv357peunZN2/e/K/b7NWrl0qXLn1beewRERGhatWquWz7kmueK2Q/jhz395rFixe77PerPdLf277++ut/XfdO33P27NmjHj16qGzZsvL19VVQUJBq166t/v37Kzk52breZ599pmnTpt32fiRpxowZ+vDDD+9oGwCyHkUQAC43d+5crV+/XuvWrdOcOXPk4eGhdu3a6fvvv3d3NNyh7777TuPGjVPPnj21evVqLV++PEv2e/XqVX3yySeSpCVLlujPP//Mkv1er02bNlq/fr2KFi2a5fvOzF9//aUePXqoXLlyWrJkidavX6+KFSu6OxaAu8DixYv12muvuTuGXUaOHKlvv/32tu67bds21alTR3FxcXr11Ve1ZMkSzZo1S23atNHSpUt1+vRp67oUQYCcy9PdAQDc+6pVq6bw8HDr7ZYtWyp//vz6/PPP1a5dOzcmu32pqam6du2afHx83B3FrXbt2iVJGjBggAoVKuSUbV68eFF58uS55Trfffed/vrrL7Vp00aLFi3SvHnz9Morrzhl//YKDg5WcHBwlu7zVvbv36+rV6/q8ccfV5MmTdwdB3fAntfAvY4+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sWPHWttu/EKyZMkSI8lMnDjR5r7z5883ksycOXOMMf88Lx4eHqZ79+63zJJeBElNTTX9+/c33t7e5pNPPrFZx97X2aOPPmpy585tTpw4YV3n2rVrpnLlynYXQSSZL7/80qa9devWplKlStbb6YWHG9d78803jSSzbNmyW+4ns31+8MEHNu327uPAgQNGkvnoo4+MMcb88ssvRpJ58cUXTZkyZaz3a968uWnQoMEts9hbBDl16pSRZKZNm3bTbR05csR4enqa5557zqb93LlzpkiRIqZr167/2gd38t6UGUeP+0KFCpmUlBRr25tvvmly5cpl93G0YMECa9vVq1dNcHCwkWT9omzMP4UVDw8PM3jwYGvbM888Y/z9/c3hw4dttvvWW28ZSdYCUvrzEhYWZlNE2Lhxo5FkPv/8c2tbdHS0yexvn/a+no35573Sw8PD7Nu3L9Nc6b97MmPv7yNjbl4Eudlru3z58ta2y5cvm4cfftj6ecPDw8PUqlXLDB8+3CQmJtpss02bNhn2k5nU1FRz9epVM2bMGFOwYEGbAkbVqlVNkyZNMtxn/PjxJleuXGbTpk027V9//bWRZBYvXvyv+wXgOpwOA8DlPvroI23atEmbNm3Sjz/+qKioKEVHR2v69Om3vN9PP/2kZs2aqWTJkjbtvXr10sWLF7V+/XpJ0o8//qiKFSvqoYce+tcsW7duVb169VS4cGGtXbtWISEhdj+O9u3b25zCc+DAAe3du1fdu3eXJF27ds3607p1ayUkJNgM8501a5Zq164tX19feXp6ysvLSytWrNCePXus69x33306e/asunXrpu+++06nTp267X65Pvf1qlevLkk6fPiwJKl8+fLKnz+/XnrpJc2aNUtxcXF290lm0k8T6tWrl037fffdpypVqticxiFJ+fPn14MPPmjXto0x1lNgmjdvLkkqU6aMIiIitGDBApuZ/92lSJEiuu+++2zaqlevbu1v6Z8+qlq1qmrUqGGz3mOPPWZze926dTp9+rSioqJsjq+0tDS1bNlSmzZtuuXQ6uvvc+3atQynDKUfu+kaNGigkJAQ63OYmZ9++klSxuf3kUcekZ+fn/X5jY2NVWpqqqKjo2+6rXSXL1/Www8/rE8//VTLli2zyeXI62zlypVq1qyZChcubL2/h4eHHn300X/NkM5isWSYq+jG5++nn36Sn5+funTpYrNeep/ceIzbo3Pnzja37d1HuXLlVLp0aeukxLGxsQoLC9Pjjz+uQ4cO6Y8//lBKSop++eUXu94j7VGgQAGVK1dOkyZN0pQpU7Rt27YMp3stXbpU165dU8+ePW2eM19fXzVp0iTTKyDd2AfOfm9KZ89x//zzzysxMdF6SlFaWppmzpypNm3a2HXlEovFotatW1tve3p6qnz58ipatKhq1aplbS9QoIAKFSpkc3z98MMPatq0qYoVK2bTd61atZIkrV692mZfbdq0kYeHh/X2je/xt2Lv6/n6bd844XLdunUlSV27dtWXX355y4mq/+330a3c7LV94MAB6+lRPj4++vbbbxUXF6epU6fqP//5j/766y+NGzdOVapUyXDqzc389NNPeuihhxQQECAPDw95eXnp1VdfVVJSkhITE//1/j/88IOqVaummjVr2jyHLVq0uKMrgAFwDoogAFyuSpUqCg8PV3h4uFq2bKnZs2crMjJSL774YqZzCKRLSkrK9MobxYoVsy6X/plvo0SJEnZliY2N1cmTJ9WnTx+HL+d6Y5aTJ09KkoYOHSovLy+bn379+kmStYgxZcoUPfvss7r//vu1YMEC/frrr9q0aZNatmypS5cuWbfZo0cPffDBBzp8+LA6d+6sQoUK6f7771dsbKx1HXv7JV3BggVtbqdP5pq+34CAAK1evVo1a9bUK6+8oqpVq6pYsWIaNWqU3XMpXC99/zfLeGM+R66u8tNPP+nQoUN65JFHlJycrLNnz+rs2bPq2rWrLl68qM8//9zhvM52Y39L//T59c9zUlKSihQpkmG9G9vSj7EuXbpkOMbefPNNGWNsrnZwvfj4+Az3ufHL080y3PgcXS8pKUmenp4ZJoW1WCw29/3rr78kya7XZmJiopYuXar69eurQYMGNssceZ3Z26+3kidPHvn6+tq0+fj42MwBkb6f6+cQkKRChQrJ09Pzlv13s33my5fPps2RfTRr1sz6ZXX58uVq3ry5wsLCVLhwYS1fvlxr167VpUuXnFYEsVgsWrFihVq0aKGJEyeqdu3aCg4O1oABA6zz2qQ/b3Xr1s3wvM2fPz9DgTezPnD2e1M6e477WrVqqVGjRta5NH744QfFx8erf//+du0js+PI29tbBQoUyLCut7e3zfF18uRJff/99xn6LX3ulxv77t/e42/F3tdzuszerxs3bqyFCxdai14lSpRQtWrVMn0/vpOst3pt35izSpUqGjhwoD755BMdOXJEU6ZMUVJSkkaOHPmv+9m4caMiIyMlSe+++67Wrl2rTZs2afjw4XZnPXnypHbs2JHhOcybN6+MMZn+gQNA1uHqMADconr16lq6dKn279+f4a/m6QoWLKiEhIQM7cePH5ckBQUFSfrnKh32TpL3wgsv6I8//rD+dbJnz552Z77xy0j6/ocNG6ZOnTplep9KlSpJkj755BNFRERo5syZNsszmwizd+/e6t27ty5cuKA1a9Zo1KhRatu2rfbv36+QkBC7+8URYWFh+uKLL2SM0Y4dO/Thhx9qzJgxyp07t15++WWHtpX+ITchISHDF+Djx49nyHdjv95K+oSaU6ZM0ZQpUzJd/swzzziU1x0KFiyoEydOZGi/sS29r9555x3Vq1cv021d/5fR6xUrVkybNm2yaUs/Hm+2v/S28uXL3zL7tWvX9Ndff9l8cTLG6MSJE9a/CqcvO3bsWIZRSzcqVaqUpkyZoo4dO6pTp0766quvrF8gHXmd2duvd6pgwYLasGGDjDE2x29iYqKuXbvm8Gsws9eAI/to1qyZ3n//fW3cuFEbNmywTlj84IMPKjY2VocPH5a/v/9Nj6F06X1+4+SumX1hCwkJsb4e9+/fry+//FKjR4/WlStXNGvWLGu+r7/+2q4Rdzd7H3Dme1M6e4/7AQMG6JFHHtHWrVs1ffp0VaxY0ToCzZWCgoJUvXp1jRs3LtPl6QVvZ7D39ZzuZs9Thw4d1KFDB6WkpOjXX3/V+PHj9dhjj6l06dKqX7++U7Le6rWdWfH5+syDBg3SmDFjrFc0u5UvvvhCXl5e+uGHH2wKWQsXLrQ7a1BQkHLnzq0PPvjgpssBuA8jQQC4RfoVBG51idFmzZrpp59+sn65T/fRRx8pT5481g/0rVq10v79+63Dem8lV65cmj17tp5//nn16tUrQ1HCEZUqVVKFChX022+/WUe63PiTfok+i8WS4XK6O3bsyHDqyvX8/PzUqlUrDR8+XFeuXNHu3bsl2d8vt8NisahGjRqaOnWqAgMDtXXrVoe3kX5qyyeffGLTvmnTJu3Zs8d61QdHnTlzRt9++60aNmyolStXZvjp3r27Nm3aZNeHXHdr2rSpdu/erd9++82m/bPPPrO53bBhQwUGBiouLu6mx5i3t3em+/D29r7p8Zju008/tbm9bt06HT58+JZXlkl//m58fhcsWKALFy5Yl0dGRsrDw8Pu11hkZKSWLl2qNWvWqG3bttbTfBx5nTVt2lQrVqywjkKQ/rmc9fz58+3KYK9mzZrp/PnzGb4UffTRR9blWbmPZs2ayWKxaOTIkcqVK5caN24sSXrooYe0cuVKxcbGqnHjxv96Ra700zx27Nhh0/6///3vlverWLGiRowYobCwMOt7RosWLeTp6ak//vjjps+bI5zx3pTO3uO+Y8eOKlWqlIYMGaLly5erX79+DhVtb1fbtm21a9culStXLtN+u50iyM1GXNj7enZkP02aNNGbb74pSRmuBHQnbvbaLleunLXgntkfCKR/CvDJyck2fXfjCL10FotFnp6eNqcYXbp0SR9//HGGdW+2jbZt2+qPP/5QwYIFM30O7TmlCoDrMBIEgMvt2rXLelm/pKQkffPNN4qNjVXHjh1VpkyZm95v1KhR1nOjX331VRUoUECffvqpFi1apIkTJyogIECSNHDgQM2fP18dOnTQyy+/rPvuu0+XLl3S6tWr1bZtWzVt2jTDtidPnqy8efOqX79+On/+vF544YXbemyzZ89Wq1at1KJFC/Xq1UvFixfX6dOntWfPHm3dutV6Pnnbtm31+uuva9SoUWrSpIn27dunMWPGqEyZMjaXPHzqqaeUO3duNWzYUEWLFtWJEyc0fvx4BQQEWP8iZ2+/2OuHH37QjBkz9PDDD6ts2bIyxuibb77R2bNnb+uvnpUqVdLTTz+td955R7ly5VKrVq0UHx+vkSNHqmTJkho0aJDD25T++eJy+fJlDRgwINMv6QULFtSnn36q999/X1OnTrW279y5U19//XWG9evWrWv9C/WJEycyXad06dIOf1mzx8CBA/XBBx+oTZs2Gjt2rAoXLqxPP/00wyWd/f399c477ygqKkqnT59Wly5dVKhQIf3111/67bff9Ndff91RIW/z5s3q06ePHnnkER09elTDhw9X8eLFraeZZKZ58+Zq0aKFXnrpJSUnJ6thw4basWOHRo0apVq1aqlHjx6S/um7V155Ra+//rouXbqkbt26KSAgQHFxcTp16pT10prXe+CBB7RixQq1bNlSkZGRWrx4sQICAux+nY0YMUL/+9//9OCDD+rVV19Vnjx5FBMT4/RLUvbs2VMxMTGKiopSfHy8wsLC9Msvv+iNN95Q69atnXLaiSP7KFSokKpVq6Zly5apadOmypMnj6R/iiCnT5/W6dOnMx05daMiRYrooYce0vjx45U/f36FhIRoxYoV+uabb2zW27Fjh/r3769HHnlEFSpUkLe3t3766Sft2LHDOjqjdOnSGjNmjIYPH66DBw+qZcuWyp8/v06ePKmNGzfKz88v02Pgeva+N40ePVqvvfaaVq5cadeloe097j08PBQdHa2XXnpJfn5+GebNcJUxY8YoNjZWDRo00IABA1SpUiVdvnxZ8fHxWrx4sWbNmmX3KaDpwsLCJElvvvmmWrVqJQ8PD1WvXt3u1/OtvPrqqzp27JiaNWumEiVK6OzZs3r77bfl5eWlJk2a3FYfZCYoKEgPPvigRo4cKT8/P82YMUN79+61uUzu008/rbNnz6pz586qVq2aPDw8tHfvXk2dOlW5cuXSSy+9ZNMn33zzjWbOnKk6deooV65cCg8PV5s2bTRlyhQ99thjevrpp5WUlKS33norwx8y0rfxxRdfaP78+Spbtqx8fX0VFhamgQMHasGCBWrcuLEGDRqk6tWrKy0tTUeOHNGyZcs0ZMgQ3X///U7rGwAOcs98rABygsyuDhMQEGBq1qxppkyZYnPpPWMyXh3GGGN27txp2rVrZwICAoy3t7epUaOGzWUa0505c8Y8//zzplSpUsbLy8sUKlTItGnTxuzdu9cYc/MrhUyaNMlIMq+++upNH8e/XWXkt99+M127djWFChUyXl5epkiRIubBBx80s2bNsq6TkpJihg4daooXL258fX1N7dq1zcKFCzPMgj9v3jzTtGlTU7hwYePt7W2KFStmunbtanbs2OFwv9zsaiE3Xulh7969plu3bqZcuXImd+7cJiAgwNx3333mww8/vGmfpMvs6jDG/DOb/ptvvmkqVqxovLy8TFBQkHn88cetl9BNd+PlUW+lZs2aGa7WcKN69eqZoKAgk5KSYn2cN/tJf/whISE3XScqKuqm+7rZ1WEyezyZXe0gLi7ONG/e3Pj6+poCBQqYJ5980nz33XeZXp1j9erVpk2bNqZAgQLGy8vLFC9e3LRp08bmub2dq8MsW7bM9OjRwwQGBprcuXOb1q1bm99///1fs1+6dMm89NJLJiQkxHh5eZmiRYuaZ5991ubSuuk++ugjU7du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HtNvv/2m+fPny9/fX0uXLrW+H0jSt99+q82bN2vatGm6cOGCu2Lf1VJTU63DsidNmqTIyEht2bJFqampKl68uObPn68qVarI19dX69atU+fOnXXy5EkdO3ZMEpPRZcYYo3Pnzqljx47aunWr3n//fS1atEgpKSnq06ePdu3apQ4dOqh169Z67733tHnzZuvvLvw7i8WipKQk7d69WxUqVFD//v3Vt29fjRw5Ul9++aWCg4N18OBBnT9/3t1R70o3O8569+6tLl26KDk5WRs2bLC2t27dWu3atdPOnTs1c+bMrIqZbRw8eFANGzbUu+++q99//11jxoyR9M/Q+MKFC6tTp05at26dJGn48OGKiYnR448/ritXrqhly5aaPXu2ze8t/COz4/TNN99U1apVdezYMetEs5L06quvqkKFCpo8ebL27duXlTGzFYvFovPnz6tTp06aMGGCNm3apMcff1zTpk3T6dOnFRERoUGDBmn06NHaunWrJOnMmTPWU7hg6/rPPxaLRZ6envrtt9+0adMma5sk9erVS5GRkXr99ddt2u9Z7q3B5Ay7du0ydevWNdWqVTN9+vQxW7duNcb889cMX19fs27dOpv1IyIizOjRo90RNVtIr0yOHz/eVKhQwSxfvtxcvXrVzJ0711gsFjN16lRjjDEbN240Xl5e5p133nFj2uylV69eZtCgQdbbw4cPN97e3ubLL780xhizd+9e07NnT5M/f37TsWNHY7FYzPfff++uuHeVG4def/XVV6ZEiRKmVKlSZuXKldb2t99+25QpU8bMmzfP5j6TJ082FStWNGfOnMmixNnPmTNnzNKlS03btm3NsmXLjDHGvPfee6ZYsWImICDAxMTE2Kw/ceJE88orr7gjarYRHx9vwsPDze+//26MMWbVqlUmb9685oknnrD+1W3Tpk2mffv2pl69epmeMof/s2jRIvPJJ5+Y48ePW/uqbdu2xmKxmEaNGpn9+/db192+fbvp27evte/xf65/b1y4cKEZMWKEmTdvntm5c6cx5p/T4Nq0aWPat29vM4Lu+PHjJioqylSoUMEcOnQoq2PftSZPnmw8PDxM2bJlTbVq1cyuXbuMMcZcvXrVus4rr7xiWrZsaapUqWJKlChhHbGYlpZm+vTpY5o0aWLi4+Pdkv9udP0xmpiYaDZu3Gji4+Otpwz/8ssvxmKx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" alt="Output" />
</div>
</div>
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">
saved -&gt; block_reason_by_state_all.{png,tsv} + block_reason_share_by_state.tsv
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h3>Where the <code>reg_ts MISSING</code> number comes from</h3><br><br>The next cell will print <code>users with reg_ts MISSING : 7,378</code>. That count is <strong>every uid in <code>z_mentorship_state.tsv</code> whose lookup in <code>build/registrations.jsonl</code> returned NaN</strong>, regardless of whether the uid is in the snapshot. It splits into:<br><br>- <strong>no_row & reg_ts NaN</strong> — the 6,451 "deleted"-tagged group from the 5-reason no_row breakdown above.<br>- <strong>has_row & reg_ts NaN</strong> — 927 users with a real mentor row but no local enwiki reg_ts (audited in the new cell below).<br><br>The pre-check cell below prints both sub-counts so the 7,378 doesn't appear out of nowhere.</div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [54]:</div>
<div class="cell-content">
<div class="input-area"><pre># Pre-check: decompose `reg_ts.isna()` BEFORE the realized-rollout cell prints 7,378.
# 7,378 = (no_row &amp; reg_ts NaN) + (has_row &amp; reg_ts NaN)
in_snap_mask = ds["userId"].map(lambda u: u in snap)
n_total = int(ds["reg_ts"].isna().sum())
n_A = int((~in_snap_mask &amp; ds["reg_ts"].isna()).sum())
n_B = int(( in_snap_mask &amp; ds["reg_ts"].isna()).sum())
print(f"reg_ts NaN total : {n_total:,}")
print(f" group A: no_row &amp; NaN : {n_A:,} # the 5-reason 'deleted' bucket")
print(f" group B: has_row &amp; NaN : {n_B:,} # has mentor row but no local enwiki reg_ts")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">reg_ts NaN total : 7,378
group A: no_row &amp; NaN : 6,451 # the 5-reason 'deleted' bucket
group B: has_row &amp; NaN : 927 # has mentor row but no local enwiki reg_ts
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h2>Step 11 — Realized rollout share per phase, with bounds for users whose <code>reg_ts</code> is missing</h2><br><br>This cell measures how the realized Z=1 share in <code>ds</code> compares to the share implied by each rollout phase's <code>mentorship_pct</code> and <code>homepage_pct</code>. The Z mapping used here is <code>Z=1</code> if <code>mentorshipState ∈ {unset, 50}</code>, else <code>Z=0</code>.<br><br>For each phase, the cell computes:<br><br>- <strong><code>n_known</code></strong>: number of users with a known <code>reg_ts</code> whose registration falls in that phase.<br>- <strong><code>realized_baseline_%</code></strong>: realized Z=1 share among <code>n_known</code>.<br>- <strong><code>nominal_Z1_all_users</code></strong>: expected Z=1 share under the rollout configuration. For phases with <code>homepage_pct == 1.0</code>, this equals <code>mentorship_pct</code>. For the early phase <code>homepage_25pct_mentor_20pct</code>, the expected share is <code>(1 − homepage_pct) × 1 + homepage_pct × mentorship_pct</code> = 0.75 × 1 + 0.25 × 0.20 = 0.80, because users not shown the Newcomer Homepage never have the A/B-assignment code run and remain <code>unset</code> (Z=1 under this mapping).<br>- <strong>Bounds (<code>lower_all_miss_as_Z0</code>, <code>upper_all_miss_as_Z1</code>)</strong>: realized share recomputed under the two extreme assumptions about users whose <code>reg_ts</code> is missing (all assumed Z=0 vs all assumed Z=1).<br><br>The cell first prints the count of users with <code>reg_ts</code> missing — <strong>7,378</strong> (Z=1: 6,771; Z=0: 607). The two previous cells decomposed this 7,378 into 6,451 (<code>no_row & reg_ts NaN</code>) plus 927 (<code>has_row & reg_ts NaN</code>).<br><br>Per-phase realized vs nominal (identifying phases only):<br><br>| phase | window | nominal Z1 | realized baseline | diff (pp) |<br>|---|---|---|---|---|<br>| p10 | 2022-03-07 to 2023-07-10 | 10.0% | 11.753% | +1.75 |<br>| p25 | 2023-07-11 to 2023-10-04 | 25.0% | 26.145% | +1.14 |<br>| p50 | 2023-10-05 to 2025-02-02 | 50.0% | 50.574% | +0.57 |<br>| p75 | 2025-02-03 to 2025-02-16 | 75.0% | 73.899% | -1.10 |<br><br>Realized shares match the nominal targets to within 1.75 percentage points across all identifying phases. The bounds for missing-<code>reg_ts</code> users are narrow (less than 0.5 pp for p10, p25, p50), which shows that the missing-<code>reg_ts</code> cohort is too small to move the realized share appreciably.<br><br>The output table is saved to <code>rollout_realized_with_bounds.tsv</code>.<br></div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [55]:</div>
<div class="cell-content">
<div class="input-area"><pre># =============================================================================
# Realized rollout % per phase, with bounds for missing-reg users.
#
# What "Z=1" means in OUR mapping (per Martin's release doc):
# Z=1 (UI enabled by rollout) = mentorshipState ∈ {unset, 50}
# Z=0 (A/B disabled) = mentorshipState == 0
#
# Why "nominal" needs two columns for the nested early phase:
# -----------------------------------------------------------
# In the late phases (p10/p25/p50/p75/p100), Newcomer Homepage rollout is
# already 100%, so EVERY new user is evaluated by the mentorship A/B code.
# In that case, nominal = mentorship_pct directly.
#
# But in the early phase `homepage_25pct_mentor_20pct`, only 25% of new users
# saw the Newcomer Homepage, and only those 25% went through the mentorship
# A/B evaluation. The other 75% never had the A/B code touch their property,
# so their mentorshipState stays `unset` -&gt; they get tagged Z=1 in OUR mapping.
#
# So among ALL new registrants in this phase, the EXPECTED Z=1 share is:
#
# expected_Z1_share
# = (1 - homepage_pct) * 1.0 # never saw homepage -&gt; unset -&gt; Z=1
# + homepage_pct * mentorship_pct # saw homepage, A/B picked them -&gt; Z=1
#
# For the early phase that's 0.75*1 + 0.25*0.20 = 0.80 = 80%. That 80% does
# NOT mean "80% were really shown the mentor UI" — it means "80% would carry
# Z=1 under our `unset∪50` mapping", because 3/4 of them never had the A/B
# code run at all. This phase is therefore identifying=False; we only use it
# as a sanity check.
#
# For the late phases (homepage_pct=1.0), the formula collapses to
# `mentorship_pct`, which is the actual rollout target.
# =============================================================================
ds["Z"] = ds["mentorshipState"].isin(["unset", "50"]).astype(int)
known = ds[ds["reg_ts"].notna()].copy()
miss = ds[ds["reg_ts"].isna()].copy()
M_total = len(miss); M_z1 = int(miss["Z"].sum()); M_z0 = M_total - M_z1
print(f"users with reg_ts known : {len(known):,}")
print(f"users with reg_ts MISSING : {M_total:,} (Z=1: {M_z1:,}, Z=0: {M_z0:,})")
def phase_of(ts):
if pd.isna(ts): return None
d = ts.date().isoformat()
for label, start, end, *_ in ROLLOUT:
if start &lt;= d &lt;= end: return label
return None
known["phase"] = known["reg_ts"].apply(phase_of)
def pct(z1, n): return round(100*z1/n, 3) if n else float("nan")
rows = []
for label, start, end, mentor_pct, hp_pct, ident in ROLLOUT:
if mentor_pct is None: continue
expected_z1 = (1 - hp_pct) * 1.0 + hp_pct * mentor_pct # effective nominal under our Z mapping
sub = known[known["phase"] == label]
n = len(sub); z1 = int(sub["Z"].sum())
rows.append({
"phase": label,
"start": start,
"end": end,
"homepage_pct": round(hp_pct*100, 1),
"mentor_pct_of_hp": round(mentor_pct*100, 1), # 'rollout target' AMONG homepage viewers
"nominal_Z1_all_users": round(expected_z1*100, 2), # what we should see in OUR mapping
"n_known": n,
"realized_baseline_%": pct(z1, n),
"if_all_miss_here_actual_Z": pct(z1 + M_z1, n + M_total),
"lower_all_miss_as_Z0": pct(z1, n + M_total),
"upper_all_miss_as_Z1": pct(z1 + M_total, n + M_total),
"diff_baseline_vs_nominal_pp": round(pct(z1, n) - expected_z1*100, 2),
"identifying": ident,
})
res = pd.DataFrame(rows)
print("\n=== realized vs nominal-under-our-Z-mapping, per phase ===")
print(res.to_string(index=False))
res.to_csv(ROOT/"analysis/diagnose_missing_mentors/rollout_realized_with_bounds.tsv",
sep="\t", index=False)
print("\nsaved -&gt; rollout_realized_with_bounds.tsv")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">users with reg_ts known : 4,974,055
users with reg_ts MISSING : 7,378 (Z=1: 6,771, Z=0: 607)
=== realized vs nominal-under-our-Z-mapping, per phase ===
phase start end homepage_pct mentor_pct_of_hp nominal_Z1_all_users n_known realized_baseline_% if_all_miss_here_actual_Z lower_all_miss_as_Z0 upper_all_miss_as_Z1 diff_baseline_vs_nominal_pp identifying
homepage_25pct_mentor_20pct 2021-09-20 2022-03-06 25.0 20.0 80.0 583837 80.386 80.528 79.383 80.631 0.39 False
p10 2022-03-07 2023-07-10 100.0 10.0 10.0 1610204 11.753 12.118 11.700 12.156 1.75 True
p25 2023-07-11 2023-10-04 100.0 25.0 25.0 264563 26.145 27.926 25.436 28.149 1.14 True
p50 2023-10-05 2025-02-02 100.0 50.0 50.0 1444626 50.574 50.784 50.317 50.825 0.57 True
p75 2025-02-03 2025-02-16 100.0 75.0 75.0 42810 73.899 76.526 63.035 77.736 -1.10 True
p100 2025-02-17 2026-6-8 100.0 100.0 100.0 37638 98.257 97.194 82.153 98.543 -1.74 False
saved -&gt; rollout_realized_with_bounds.tsv
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-markdown">
<div class="cell-prompt prompt-empty">&nbsp;</div>
<div class="cell-content">
<div class="markdown-cell"><h3>Audit: <code>reg_ts MISSING</code> is two different groups</h3><br><br>The 7,378 <code>reg_ts.isna()</code> users above are <strong>not</strong> all "deleted accounts." They split into:<br><br>| group | in snapshot? | meaning | count |<br>|---|---|---|---|<br>| A | no_row & reg_ts NaN | originally tagged <code>5_deleted</code> in the no_row breakdown; later found to be pre-rollout <strong>global</strong> CentralAuth accounts whose enwiki local registration log is missing | 6,451 |<br>| B | has_row & reg_ts NaN | has a real mentor row, but <code>build/registrations.jsonl</code> has no local enwiki reg_ts for them | <strong>927</strong> |<br><br>Group A is the one analyzed throughout this notebook (5 no_row reasons).<br>Group B was <strong>not</strong> broken out anywhere; it was surfaced only when building the for-Martin file (<code>analysis/for_martin/users_name_state_regts.tsv</code>).<br><br>The next cell audits group B: by state, by snapshot's <code>mentor_assigned_ts</code> month (a proxy for when they entered), and exports the list.</div>
</div>
</div>
<div class="cell cell-code">
<div class="cell-prompt input-prompt">In [56]:</div>
<div class="cell-content">
<div class="input-area"><pre># =============================================================================
# Audit group B: users WITH a mentor row in snapshot but NO local enwiki reg_ts.
# Expected: 927 (= 7,378 reg_ts MISSING - 6,451 no_row deleted).
# =============================================================================
in_snap = ds["userId"].map(lambda u: u in snap)
groupB = ds[in_snap &amp; ds["reg_ts"].isna()].copy()
print(f"group B size (has_row &amp; reg_ts NaN): {len(groupB):,}")
print("\n--- by mentorshipState ---")
print(groupB["mentorshipState"].value_counts(dropna=False).to_string())
print("\n--- by Z (unset|50 vs 0) ---")
print(groupB["mentorshipState"].isin(["unset","50"]).value_counts().rename({True:"Z=1",False:"Z=0"}).to_string())
def assigned_ts(uid):
v = snap.get(uid)
if v is None: return None
for x in (v if isinstance(v,(list,tuple)) else [v]):
if isinstance(x,str) and len(x)&gt;=8 and x[:4].isdigit():
return x
return None
groupB["assigned_ts"] = groupB["userId"].map(assigned_ts)
groupB["assigned_month"] = pd.to_datetime(groupB["assigned_ts"], errors="coerce").dt.to_period("M").astype("string")
print("\n--- by assigned_month ---")
print(groupB["assigned_month"].value_counts(dropna=False).sort_index().to_string())
OUT = ROOT / "analysis/diagnose_missing_mentors/group_B_has_row_no_reg.tsv"
groupB[["userId","mentorshipState","assigned_ts"]].to_csv(OUT, sep="\t", index=False)
print(f"\nwritten -&gt; {OUT}")
n_missing = int(ds["reg_ts"].isna().sum())
n_groupA = int((~in_snap &amp; ds["reg_ts"].isna()).sum())
print(f"\nsanity: reg_ts NaN total={n_missing:,} = A(no_row &amp; NaN)={n_groupA:,} + B(in_snap &amp; NaN)={len(groupB):,}")</pre></div>
<div class="output-area">
<div class="output-wrapper">
<div class="cell-prompt output-prompt"></div>
<div class="output-content">
<div class="output-stream">group B size (has_row &amp; reg_ts NaN): 927
--- by mentorshipState ---
mentorshipState
0 581
unset 346
--- by Z (unset|50 vs 0) ---
mentorshipState
Z=0 581
Z=1 346
--- by assigned_month ---
assigned_month
&lt;NA&gt; 927
written -&gt; /home/yubozhou/2026_summer/wikipedia_2sls/2sls_pipeline/analysis/diagnose_missing_mentors/group_B_has_row_no_reg.tsv
sanity: reg_ts NaN total=7,378 = A(no_row &amp; NaN)=6,451 + B(in_snap &amp; NaN)=927
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="export-footer">
Exported with <a href="https://www.runcell.dev/tool/ipynb-to-html">runcell</a> — convert notebooks to HTML or PDF anytime at runcell.dev.
</footer>
</body>
</html>

File Metadata

Mime Type
text/html
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26630993
Default Alt Text
diagnose_missing_mentors.html (290 KB)

Event Timeline