VKВКонтактесобеседованиеаналитика данныхсоцсетьfeed-rankingMLкарьера

Вопросы собеса в VK на аналитика 2026: 25+ реальных + разбор

2026-06-04 23 мин

VK — крупнейшая соцсеть РФ (60M+ MAU) и собес туда фокусируется на engagement metrics (DAU/MAU sticky, session length, feed CTR) и ML feed-ranking. Это самый «алгоритмический» собес среди РФ-компаний для аналитика. В этом гайде разберу 25+ реальных вопросов с 5 раундов собеса аналитика VK (Соцсеть / Музыка / Mail / Облако / Mini Apps) — с разбором сильного и слабого ответа.

Главное про VK
VK глубоко проверяет **engagement metrics + feed-ranking ML**. Stack: ClickHouse + Spark + Python + PyTorch. Если ты из e-comm или fintech — учитывай разницу: здесь оптимизируешь **внимание** юзеров, а не покупки.

Грейды аналитика в VK (2026)

ГрейдCompensation/мес РФОпытЧто спрашивают
Junior140-210K ₽0-1 годSQL базовый, pandas, базовые engagement-метрики
Middle210-330K ₽1-3 годаClickHouse advanced, A/B, feed-ranking basics
Senior330-500K ₽3-6 летML/RecSys, deep ranking, multi-product analytics
Lead500-680K+ ₽6+ летMulti-team projects, ML strategy, system design

5 раундов собеса VK

РаундЧтоДлительность
1. HR-скринингМотивация, social/ML опыт30 мин
2. SQL live (ClickHouse)2-3 задачи + engagement metrics60 мин
3. Python + MLpandas + ranking + A/B60 мин
4. Продуктовый кейсEngagement / feed ranking / recommendations60 мин
5. Финал с лидомBehavioral + system thinking45 мин

8 SQL-вопросов с собеса VK

DAU/MAU stickiness — query за 30 дней.

✅ Сильный ответ:

\\\sql

WITH daily_users AS (

SELECT toDate(event_ts) AS d, uniq(user_id) AS dau

FROM events

WHERE event_ts >= today() - 30

GROUP BY d

),

monthly_users AS (

SELECT toDate(event_ts) AS d, uniq(user_id) AS mau

FROM events

WHERE event_ts >= today() - 60

GROUP BY d

)

SELECT d.d, d.dau, m.mau, 100.0 * d.dau / m.mau AS stickiness_pct

FROM daily_users d

JOIN monthly_users m ON d.d = m.d

ORDER BY d.d;

\\\

Senior follow-up: «Stickiness > 50% = «утилитарная» соцсеть (юзер заходит каждый день — как WhatsApp). VK обычно 30-40% — entertainment + comm пополам.»

Session length percentiles.

✅ Сильный ответ:

\\\sql

WITH sessions AS (

SELECT user_id, session_id,

dateDiff('second', min(event_ts), max(event_ts)) AS session_sec

FROM events

WHERE event_ts >= today() - 7

GROUP BY user_id, session_id

)

SELECT

quantile(0.50)(session_sec) AS p50_sec,

quantile(0.75)(session_sec) AS p75_sec,

quantile(0.95)(session_sec) AS p95_sec,

count() AS total_sessions

FROM sessions

WHERE session_sec > 0;

\\\

Feed CTR by position.

✅ Сильный ответ:

\\\sql

SELECT

position,

countIf(event_type = 'click') * 1.0 / countIf(event_type = 'impression') AS ctr,

countIf(event_type = 'impression') AS impressions

FROM feed_events

WHERE event_date >= today() - 7

GROUP BY position

ORDER BY position

LIMIT 50;

\\\

Senior: «Position bias видна — top-position CTR ~15%, position-10 ~3%. Cliked != relevant — для proper ranking eval нужен IPS (Inverse Propensity Scoring).»

Engagement по типам контента.

✅ Сильный ответ:

\\\sql

SELECT

content_type,

uniq(user_id) AS unique_users,

countIf(event_type = 'view') AS views,

countIf(event_type = 'like') AS likes,

countIf(event_type = 'comment') AS comments,

countIf(event_type = 'share') AS shares,

countIf(event_type = 'like') * 1.0 / countIf(event_type = 'view') AS like_rate

FROM content_events

WHERE event_date >= today() - 30

GROUP BY content_type

ORDER BY views DESC;

\\\

→ Метрики AARRR

Funnel: открытие → лайк → комментарий.

✅ Сильный ответ:

\\\sql

WITH user_actions AS (

SELECT user_id,

countIf(event_type = 'session_start') AS sessions,

countIf(event_type = 'view') AS views,

countIf(event_type = 'like') AS likes,

countIf(event_type = 'comment') AS comments

FROM events

WHERE event_date >= today() - 7

GROUP BY user_id

)

SELECT

countIf(sessions > 0) AS opened,

countIf(views > 0) AS viewed,

countIf(likes > 0) AS liked,

countIf(comments > 0) AS commented

FROM user_actions;

\\\

Viral coefficient (K-factor) calculation.

✅ Сильный ответ:

«K-factor = invites per user × conversion rate of invites

\\\sql

WITH user_invites AS (

SELECT

inviter_user_id AS user_id,

countIf(invite_status = 'sent') AS invites_sent,

countIf(invite_status = 'accepted') AS invites_accepted

FROM invites

WHERE invite_date >= today() - 30

GROUP BY inviter_user_id

)

SELECT

avg(invites_sent) AS avg_invites_per_user,

sum(invites_accepted) * 1.0 / sum(invites_sent) AS conversion_rate,

avg(invites_sent) * (sum(invites_accepted) * 1.0 / sum(invites_sent)) AS k_factor

FROM user_invites;

\\\

K > 1 = viral growth. K < 1 = need paid acquisition.»

Top-3 friend overlap (mutual friends).

✅ Сильный ответ:

\\\sql

SELECT

u1.user_id AS user_id,

u2.user_id AS friend_id,

count() AS mutual_friends

FROM friendships u1

JOIN friendships u2 ON u1.friend_id = u2.friend_id

WHERE u1.user_id != u2.user_id

GROUP BY u1.user_id, u2.user_id

HAVING mutual_friends >= 3

ORDER BY mutual_friends DESC

LIMIT 100;

\\\

Senior: «На VK scale 60M users × avg 200 friends = 12B friendship edges. Self-join не scale'ится. Production: distributed graph DB или MapReduce.»

Cohort analysis: registration month → MAU retention.

✅ Сильный ответ:

\\\sql

WITH cohorts AS (

SELECT user_id, toStartOfMonth(min(event_date)) AS cohort

FROM events

GROUP BY user_id

),

monthly_active AS (

SELECT user_id, toStartOfMonth(event_date) AS active_month

FROM events

GROUP BY user_id, active_month

)

SELECT

c.cohort,

ma.active_month,

dateDiff('month', c.cohort, ma.active_month) AS month_offset,

uniq(c.user_id) AS users

FROM cohorts c

JOIN monthly_active ma ON c.user_id = ma.user_id

GROUP BY c.cohort, ma.active_month

ORDER BY c.cohort, month_offset;

\\\

→ Когортный анализ retention в SQL

5 Python/ML-вопросов

Feed-ranking ML: основные подходы.

✅ Сильный ответ:

«Подходы к ranking в feed:

В VK обычно: GBDT (LightGBM) для quick iteration + deep model (PyTorch) для production. Cascade ranker — fast first stage (LightGBM) → slow re-ranker (deep) для top-100.»

Cold-start problem: new user, no history. Как ранжируешь feed?

✅ Сильный ответ:

«Multi-level cold-start strategy:

Level 1: Demographic priors

Level 2: Content-based

Level 3: Friend-based

Level 4: Exploration boost

После 5-10 interactions ML model становится feasible. До этого — heuristic-based ranking.»

Reaction-based features в feed-ranking.

✅ Сильный ответ:

«Reaction features в VK feed-ranking:

Practice в VK: weighted sum of reactions через learned weights (через A/B-testing).»

Pandas: groupby с rolling window engagement.

✅ Сильный ответ:

\\\python

import pandas as pd

df = df.sort_values(['user_id', 'date'])

df['rolling_engagement_7d'] = (

df.groupby('user_id', group_keys=False)

.apply(lambda g: g['engagement_score'].rolling(7, min_periods=1).mean())

)

\\\

Senior follow-up: «На больших данных используй \.rolling()\ напрямую с groupby — chains лучше apply.»

Sequence modeling: predict next user action.

✅ Сильный ответ:

«Approaches:

Use cases: predict next click in session, predict abandonment, recommend related content.»

5 продуктовых вопросов

Engagement metric выбираем для feed-ranking.

✅ Сильный ответ:

«Hierarchy:

Primary: weighted engagement score = a × likes + b × comments + c × shares + d × time_spent. Веса learned через A/B.

Secondary:

Guardrails:

WB-specific: \Total Watch Time\ для video, \Comments per like\ для discussion quality. Также — \Cross-product engagement\ (юзер использует Music + Feed + Mail).»

Cold-start problem с новым типом контента.

✅ Сильный ответ:

«Steps:

Risk: новый тип отжирает позиции у established types → trade-off с overall engagement. A/B обязательно.»

DAU upal на 8% за неделю. Что делаешь?

✅ Сильный ответ:

«Декомпозиция DAU:

DAU = MAU × stickiness = (returning users + new users) × (sessions / user)

1. Сегментация:

2. Гипотезы:

3. Action:

→ Метрики AARRR — диагностика

NSM для VK — что предложишь?

✅ Сильный ответ:

«NSM для VK должна reflect:

Кандидаты:

❌ DAU — может надуваться bots, push notifications

❌ Revenue — secondary в social

Реальный NSM возможно «Meaningful Daily Interactions per User» — поведенческий health metric.»

Music Recommendations: что отличается от feed?

✅ Сильный ответ:

«Feed: heterogeneous content (text/video/photo), short consumption, broadcast mode (similar для всех).

Music: homogeneous (только audio), longer consumption (3-5 мин/track), personal mode (каждый юзер — личный playlist).

Differences in ML:

VK Music специально:

2 behavioral вопроса (раунд 5)

Конфликт с ML engineer о метрике успеха.

✅ Сильный ответ (STAR):

«Ситуация: ML engineer считал что NDCG@10 правильная метрика для feed-ranking. Я считал что primary должна быть session-level engagement.

Задача: найти common ground без эскалации к VP.

Действие:

Результат: Hybrid approach стал нашим standard. Через 6 месяцев — paper в KDD по этой методологии.»

Когда твой A/B провалился — что вынес.

✅ Сильный ответ:

«Кейс: новый ranker увеличивал CTR +8% (offline), но online A/B показал -3% session duration.

Learning:

Action: разработал new offline metric — \Session Engagement Score\ = correlation с known good production rankers. Это стало standard в VK для feed-ranking offline eval.»

Red flags (не делай)

Как готовиться к VK

Месяц 1: engagement metrics + ClickHouse

Месяц 2: ML basics + ranking

Месяц 3: кейсы + behavioral

FAQ

VK vs Yandex — кто сложнее?

Технически Yandex сложнее (search relevance, deeper ML). VK больше про продукт (engagement metrics, social dynamics).

Можно ли пройти junior без ML опыта?

Да. Middle+ требует ML basics.

Какие команды самые конкурентные?

Feed-ranking, Music ML, VK ads targeting. Менее — VK Pay, VK Mini Apps.

Стек технологий?

ClickHouse + Spark + Airflow + Python + PyTorch.

Что дальше

Сравнить Free и Pro → (1999 ₽/мес)

Источники

Тренируй SQL/Python на 521+532 задачах
Тренажёр с авто-проверкой + AI мок-собес. Первые 5 задач каждого типа бесплатно.
Открыть тренажёр →