Portfolio index — NikitaBoyarkin (47 authored repos)
Single resume/landing-ready index. Every number below is extracted
from the repo's own README; nothing is inferred. Where a README states
no quantified result, the cell says
no quantified result.
- Repos: 47 (23
case-*sub-studies +volta-bankingumbrella, 17 tooling/infra, 6 learning/legacy) - With a quantified headline result: 33 / 47
- Without one: 14 (see Gaps in the evidence)
- Evidence strength = significance + ROI/effect size + sample size (or real data).
1. Flagship — case studies (24)
Ordered by strength of evidence, strongest first.
| repo | showcase metric | stack | result | evidence | link |
|---|---|---|---|---|---|
| volta-banking | +5.72pp KYC conversion, p<0.0001 | Python · pandas · scipy · sklearn · shap | €656K/yr at 44× ROI on €15K dev-cost; M1 +11.8pp, M3 +9.2pp, +€227K/yr | strong | https://github.com/NikitaBoyarkin/volta-banking |
| case-ab | +5.72pp KYC conversion, Z=5.82, p<0.0001 (95% CI +3.78…+7.66) | Python · pandas · scipy · sklearn | Ship-gate passed (no SRM, lift ≥ MDE); +€656K/yr at 44× ROI | strong | https://github.com/NikitaBoyarkin/case-ab |
| case-causal-kyc | DiD ATT M3 +9.09pp (95% CI +6.21…+11.96), p<0.001 | Python · scipy · statsmodels | N=84,000; pre-trends flat, placebo ≈ 0, max abs SMD 0.157; 3/3 CIs cover injected effect | strong | https://github.com/NikitaBoyarkin/case-causal-kyc |
| case-retention | M1 +11.8pp, M3 +9.2pp step-change | Python · pandas · scipy | +€227K/yr incremental LTV; Premium LTV 4.3× Free (M6 60% vs 31%) | strong | https://github.com/NikitaBoyarkin/case-retention |
| case-dormant-winback | human +5.34pp, light-touch +2.77pp (3-arm RCT) | Python · scipy · statsmodels | Light-touch ROI 2.54 (30–60d) and 1.26 (60–90d); human ROI 0.40 → kill as mass channel | strong | https://github.com/NikitaBoyarkin/case-dormant-winback |
| case-anchor-cac | LTV/CAC 1.76× at SOM (225K) | Python · pandas · scipy | ≥3 gate holds only to ~70K; 17.0-month payback; marginal SOM user costs €80 | strong | https://github.com/NikitaBoyarkin/case-anchor-cac |
| case-assisted-cac | 45+ blended LTV/CAC 0.66 (gate ≥3) | Python · scipy · statsmodels | Assisted CAC €120 → 50-month payback; Welch anchor−45+ = €43.99, p≈2e-13 | strong | https://github.com/NikitaBoyarkin/case-assisted-cac |
| case-premium-offers | +3.33pp 45+, +4.16pp families, +3.79pp travelers (all Holm-significant) | Python · scipy · statsmodels | Segment offers lift gap segments; anchor barely moves (+0.86pp, ns) | strong | https://github.com/NikitaBoyarkin/case-premium-offers |
| case-kyc-45 | 35–44 +11.0pp (p<0.001); 45+ +1.4pp (ns) | Python · scipy · statsmodels | 45+ gap persists 53.2% vs 61.2% (chi² p<0.001); referral converts 45+ best (64.1%) | strong | https://github.com/NikitaBoyarkin/case-kyc-45 |
| case-segmentation | Power = 12% of users → 41% of revenue | Python · pandas · sklearn | K=4 chosen from data (elbow + silhouette); migration scenarios +€310K/yr | strong | https://github.com/NikitaBoyarkin/case-segmentation |
| case-referral | anchor 29.6% vs 45+ 4.8% and families 8.6% | Python · scipy · statsmodels | chi² p<0.001, z=43.3; gap opens at accept (78% vs 26% vs 40%) | strong | https://github.com/NikitaBoyarkin/case-referral |
| case-premium-upsell | Premium Status 41.2%, anchor 17.3%, 45+ 1.8% | Python · scipy · sklearn | z=34, p<0.001; gap persists within every cohort (Power 26% vs Dormant 2%) | strong | https://github.com/NikitaBoyarkin/case-premium-upsell |
| case-funnel | KYC 56.6% step conversion (2,781 of 4,917) | Python · pandas · scipy | 10,000 installs → 1,269 first tx (12.7%); registration loses 2,682 (73.2%) | strong | https://github.com/NikitaBoyarkin/case-funnel |
| case-unit-economics | −€0.45 net margin per €100 FX transaction | Python · pandas · scipy | Break-even needs FX cost 1.00% → 0.55%; loss grows with volume | medium | https://github.com/NikitaBoyarkin/case-unit-economics |
| case-fx-sourcing | 0.55% gate reachable at €332M/mo (122× today) | Python · scipy | ~0.20pp discount per order of magnitude; best provider Interbank Prime 0.745% | medium | https://github.com/NikitaBoyarkin/case-fx-sourcing |
| case-attribution | Shapley: referral €263.7K vs display €125.0K | Python · pandas · scipy | Referral leads all 4 models (€218–264K); heuristics overstate the last click | medium | https://github.com/NikitaBoyarkin/case-attribution |
| case-support-churn | churn 37.1% (0 tickets) → 81.1% (3+) | Python · pandas · scipy | 3+ tickets churn 2.2× the base; CSAT bands barely discriminate (52–55%) | medium | https://github.com/NikitaBoyarkin/case-support-churn |
| case-clv | Gamma-Gamma: Power €5,166 vs Dormant €27.7 | Python · scipy · statsmodels | Order Power > Growth > Casual > Dormant robust across 3 methods; predictive 2.9–5.9× historical | medium | https://github.com/NikitaBoyarkin/case-clv |
| case-jtbd | Dormant 39.4% (45+) vs 15.1% (families), chi² p<0.001 | Python · scipy | JTBD segments ≠ behavioral cohorts; dormancy driven by UX, not "no job" | medium | https://github.com/NikitaBoyarkin/case-jtbd |
| case-anomalies | Isolation Forest best F1 50.4% (401 detections) | Python · sklearn · scipy | Z-score precision 80.5% at recall 24.7%; all scored against ground truth | weak | https://github.com/NikitaBoyarkin/case-anomalies |
| case-churn | Random Forest +0.03 ROC-AUC over logistic regression | Python · sklearn · shap | Top churn driver is device-error rate 23.7%, above balance and activity | weak | https://github.com/NikitaBoyarkin/case-churn |
| case-nps | NPS near zero: peak +12.9, bottom −1.8 | Python · pandas · scipy | Drivers: app_quality +30.3, product +29.4; fees −59.4, onboarding −23.6 | weak | https://github.com/NikitaBoyarkin/case-nps |
| case-spend | bills 25.8% + travel 20.2% ≈ half the turnover | Python · pandas · scipy | Groceries most frequent (18,238 tx, €45.8 avg); travel is thin-margin | weak | https://github.com/NikitaBoyarkin/case-spend |
| case-rfm | Champions = 23.9% of the base | Python · pandas · sklearn | At Risk 11.5% + Lost 23.2% form a large reactivation reserve | weak | https://github.com/NikitaBoyarkin/case-rfm |
2. Tooling / infra (17)
| repo | showcase metric | stack | result | evidence | link |
|---|---|---|---|---|---|
| ab_test | CUPED removes 17.7% of variance; delta-method CTR +0.51pp, p<0.0001 | Python · statsmodels · scipy | 18 calibration modules, each re-run as a test; SRM p=0.8376; BH-corrected, no segment differs | strong | https://github.com/NikitaBoyarkin/ab_test |
| serp-rank-lab | revenue-optimum earns +38% per search (1,196.6 vs 868.9) | Python · DuckDB · Streamlit · scipy | IPW-weighted logs +19.3% revenue; position 1 = 47.3% of revenue; mSPRT FPR 0.25% vs 14.5% peeking | strong | https://github.com/NikitaBoyarkin/serp-rank-lab |
| sql-analytics-case-study | funnel drops 54% at cart→checkout | SQL · DuckDB · dbt | D1→D30 retention 21%→5%; repeat rate 3.5%; real case (UCI, 1.07M lines) 72.4% repeat | strong | https://github.com/NikitaBoyarkin/sql-analytics-case-study |
| causal-uplift | CUPED cuts standard error ~26% (×0.742) | Python · LightGBM | 10k → ~5.5k users/arm for same power; "new" respond ~8× vs "returning" (0.1108 vs 0.0132) | medium | https://github.com/NikitaBoyarkin/causal-uplift |
| churn-prediction | lift@top-decile 5.44× (recall 0.544), AUC 0.916 | Python · LightGBM · sklearn | Leakage-free chronological split; at-risk subgroup lift 1.75×, AUC 0.901 | medium | https://github.com/NikitaBoyarkin/churn-prediction |
| crm-experiment-lab | GCG cumulative uplift +0.9968 purchases/user by day 27 [+0.9433, +1.0502] | Python · statsmodels · scipy | Net +50.5 per 1,000 treated (uplift +212.8 − unsub 162.3); 0 daily-cap violations | medium | https://github.com/NikitaBoyarkin/crm-experiment-lab |
| rag-eval-harness | recall@5 1.00, MRR 1.00, faithfulness 1.00 | Python · scikit-learn · TF-IDF | correctness 0.37, precision@5 0.20 on 20 labeled questions; runs with zero API keys | medium | https://github.com/NikitaBoyarkin/rag-eval-harness |
| rfm-analysis-of-bank-clients | Gini 0.324; top 20% hold 38.2% of revenue | Python · pandas · Streamlit | 1,983 clients / 9,492 tx; Champions 6.4% of clients → 12.1% of revenue | medium | https://github.com/NikitaBoyarkin/rfm-analysis-of-bank-clients |
| NikitaBoyarkin (profile) | +5.72pp KYC conversion, €656K/yr; A/B p=0.0034 on 8,000 users | Markdown · SVG · CI | Aggregates 22 projects / 4 tracks / 23 Volta case studies; every evidence link HTTP-checked in CI | medium | https://github.com/NikitaBoyarkin/NikitaBoyarkin |
| tableau_cohort_analysis | no quantified result | Python · pandas · Tableau Hyper API | Enables cohort retention/LTV export (CSV + .hyper); 34 tests, 6-column contract | weak | https://github.com/NikitaBoyarkin/tableau_cohort_analysis |
| airflow | no quantified result | Airflow 3 · Postgres · Google Sheets · uv | Enables idempotent Postgres→Sheets reports; 2 DAGs, 64 tests, DQ validation + alerts | weak | https://github.com/NikitaBoyarkin/airflow |
| python | no quantified result | Python · pandas · matplotlib | Enables reusable load→clean→EDA→viz pipeline; 34 tests, ≥80% coverage | weak | https://github.com/NikitaBoyarkin/python |
| ml | no quantified result | Python · scikit-learn | Enables leakage-free ColumnTransformer preprocessing; 21 tests | weak | https://github.com/NikitaBoyarkin/ml |
| browser-mini-games | no quantified result | Astro · SVG · PostHog · Playwright | Enables 10 playable self-contained SVG games; 9 PostHog events, Playwright smoke tests | weak | https://github.com/NikitaBoyarkin/browser-mini-games |
| digital_garden | no quantified result | Quartz v4 · TypeScript | Publishes an "EQ in IT" digital garden (wikilink graph, GitHub Pages) | weak | https://github.com/NikitaBoyarkin/digital_garden |
| scrolly-english-speaking | no quantified result | Astro 6 · MDX · D3 v7 | Publishes a scrollytelling spoken-English guide (GitHub Pages) | weak | https://github.com/NikitaBoyarkin/scrolly-english-speaking |
| NikitaBoyarkin.github.io | no quantified result | Astro 7 · TypeScript | Publishes a bilingual RU/EN portfolio: 17 case studies, 23 Volta sub-parts, 24 notes | weak | https://github.com/NikitaBoyarkin/NikitaBoyarkin.github.io |
3. Learning / legacy (6)
| repo | showcase metric | stack | result | evidence | link |
|---|---|---|---|---|---|
| my_cv | no quantified result | — | Single-page CV (roadmap.sh project), README + LICENSE only | weak | https://github.com/NikitaBoyarkin/my_cv |
| telegram_bot_public | no quantified result | — | Public placeholder for telegram_bot; README only | weak | https://github.com/NikitaBoyarkin/telegram_bot_public |
| NLTK | no quantified result | Python · NLTK | Legacy NLP learning scripts/notebooks, no test suite | weak | https://github.com/NikitaBoyarkin/NLTK |
| Python_algorithms | no quantified result | Python | Legacy algorithm-practice repo, no tests | weak | https://github.com/NikitaBoyarkin/Python_algorithms |
| Python_data_structures | no quantified result | Python | Legacy data-structures practice repo, no tests | weak | https://github.com/NikitaBoyarkin/Python_data_structures |
| TensorFlow-and-Keras | no quantified result | Jupyter Notebook · TF/Keras | Legacy single-notebook repo, no tests | weak | https://github.com/NikitaBoyarkin/TensorFlow-and-Keras |
4. How to present
- Headline number: lead with "+5.72pp KYC conversion (p<0.0001) → €656K/yr at 44× ROI". It is the only figure with significance, a business unit, and an ROI in one line — and it is the one the profile README and the portfolio site already promote.
- Feature 3–5, in this order: (1)
volta-bankingas the umbrella; (2)case-ab(the randomized proof behind the headline); (3)case-causal-kyc(DiD +9.09pp on N=84,000 — shows you don't confuse correlation with causation); (4)case-retention(M1 +11.8pp, +€227K/yr — shows the effect survived in cohorts); (5)serp-rank-lab(+38% revenue/search) orsql-analytics-case-study(funnel −54%) for a second domain. - Second headline for method depth: "CUPED removes
26% of variance — same power on 5.5k users/arm instead of 10k"
(
causal-uplift) and "18 A/B modules, each calibration re-run as a test" (ab_test). This is what separates a methods portfolio from a charts portfolio. - Show decision-grade judgment, not just wins. Three
READMEs state negative results as results:
case-dormant-winback(human ROI 0.40 → kill),case-assisted-cac(45+ LTV/CAC 0.66 → hold),case-anchor-cac(LTV/CAC 1.76 at SOM → hold). Lead a bullet with "killed a channel and held a launch on the evidence" — it is more credible than another positive lift. - Quantify breadth with one line: "23 linked case studies under one neobank flagship; 17 case studies on the live bilingual portfolio site."
- For a BI/analytics role, swap the top tooling pick
to
sql-analytics-case-study(25 DuckDB cases + dbt layer + a real-data case) andchurn-prediction(leakage-free split, lift@top-decile 5.44×). - Be explicit that the Volta numbers are synthetic (seeded generators) and point to the one real-data artifact: SQL case 26 on UCI Online Retail II (1,067,371 invoice lines, 72.4% repeat). Honesty here protects the headline.
- Drop from the resume/landing entirely:
NLTK,Python_algorithms,Python_data_structures,TensorFlow-and-Keras,my_cv,telegram_bot_public— no quantified result and they dilute the analyst signal. Keep them only as a one-line "archive" link if a breadth signal is needed. - Do not headline the infra repo counts. "10 games", "2 DAGs", "64 tests", "34 tests", "≥80% coverage" are engineering metadata, not outcomes. Mention tooling as capability (Airflow, dbt, DuckDB, Streamlit, Postgres, Supabase) rather than as results.
- If one number must carry a landing hero, use
+5.72pp/€656K/yr; if two, add+38% revenue per search(serp-rank-lab) to show the same rigor outside the flagship's domain.
5. Gaps in the evidence
14 of 47 repos state no quantified result. What single number would fix each:
| repo | gap | the one number that would make it stronger |
|---|---|---|
| tableau_cohort_analysis | methodology + test count only; no business metric | LTV at a fixed horizon per cohort (e.g. "LTV@k=3 = €X; Premium cohort holds €Y of 12-month value") |
| airflow | pipeline described, no measured outcome | "Manual report 45 min → 0; 30-day success rate 9x.x%; p95 duration Z
s" from dag_metrics |
| python | coverage is not an outcome | the analysis result from segmentation_report.md (e.g.
"top quartile = X% of spend") |
| ml | only split shape (8,5)/(2,5) and 21 tests |
a model metric on a named dataset (Customer_Churn accuracy / AUC, or Housing RMSE) |
| browser-mini-games | game and event counts | a real engagement figure (sessions played, play-through, or a Lighthouse performance score) |
| digital_garden | content site, no metric | reach: monthly visitors, or number of published notes/graph nodes |
| scrolly-english-speaking | "live page" only | a measured outcome: Lighthouse score, or learners/visits |
| NikitaBoyarkin.github.io | 17/23/24 are counts, not results | a site metric: Lighthouse score, monthly traffic, or PostHog visitors |
| NikitaBoyarkin (profile) | numbers are inherited from the flagship | add "N public repos / N case studies" and a traffic figure to make the roll-up self-standing |
| my_cv | README + LICENSE only | nothing worth adding — fold into the portfolio site and drop the repo |
| telegram_bot_public | placeholder, README only | ship the real bot and report users or commands/day, or drop |
| NLTK | legacy scripts, no tests | number of exercises/notebooks, or a small task accuracy — otherwise drop |
| Python_algorithms | legacy practice | number of solved problems + tests — otherwise drop |
| Python_data_structures | legacy practice | number of implemented structures + tests — otherwise drop |
| TensorFlow-and-Keras | single notebook | a training metric (accuracy/loss) on a named dataset — otherwise drop |
Note on volta-banking vs its 23
case-* repos: the umbrella README and the
sub-study READMEs state the same headline
(+5.72pp, €656K/yr). On a resume this should
be presented as one flagship with sub-studies, not as
24 separate results, to avoid the appearance of double-counting.
Note on synthetic data: every Volta / CRM / churn /
SERP / RAG figure comes from a seeded synthetic generator (stated in
each README). The only real-data result in the set is
sql-analytics-case-study case 26 (UCI Online Retail II).
Present synthetic results as reproducible methods
demonstrations, and cite case 26 when a real-data proof point is
needed.