Перейти к содержанию

Математика для ML: подготовка к интервью

~12 минут чтения

Предварительно: Учебные материалы | Формулы: линал | Формулы: теорвер

Математика -- фильтр номер один на ML-интервью: по данным Interviewing.io (2025), 68% отказов на ML-позициях связаны с недостаточным пониманием мат. основ. Ниже -- 40+ реальных вопросов с собеседований 2025-2026, отсортированных по разделам. Формат: Q (вопрос) / A (развёрнутый ответ с формулами и кодом).

Обновлено: 2026-02-11


Calculus

Q: Почему Adam может diverge при большом learning rate?

A: Adam адаптирует learning rate для каждого параметра, но: 1. Unbounded updates: \(m_t\) и \(v_t\) могут расти неограниченно 2. Missing denominator bound: В оригинальном Adam нет bound на \(1/\sqrt{v_t}\) 3. Solution: AdamW с weight decay или AMSGrad (max pooling \(v_t\))

# AdamW fix
w = w - lr * (m / (sqrt(v) + eps) + weight_decay * w)

Q: Почему gradient vanishing в RNN?

A: Chain rule через t шагов: $\(\frac{\partial L}{\partial h_0} = \prod_{t=1}^{T} \frac{\partial h_t}{\partial h_{t-1}} \cdot \frac{\partial L}{\partial h_T}\)$

Если \(\|\frac{\partial h_t}{\partial h_{t-1}}\| < 1\) (typical sigmoid/tanh), то \(grad \to 0\) exponentially.

Solutions: LSTM/GRU gates, ReLU, residual connections, layer norm.

Q: Вычислите градиент BCE loss по logits

A: $\(L = -[y \log(\sigma(z)) + (1-y)\log(1-\sigma(z))]\)$

\[\frac{\partial L}{\partial z} = \sigma(z) - y\]

Красота: градиент равен ошибке предсказания! Это делает обучение стабильным.


Linear Algebra

Q: Почему softmax stable? Как избежать overflow?

A: Softmax содержит \(e^{x_i}\). При \(x_i \gg 0\) происходит overflow.

Trick: Вычесть max из всех элементов: $\(\text{softmax}(x_i) = \frac{e^{x_i - \max(x)}}{\sum_j e^{x_j - \max(x)}}\)$

Результат идентичен, но численно стабилен.

Q: Что такое rank матрицы и почему это важно для ML?

A: Rank = число линейно независимых строк/столбцов.

Важность: - Low rank → коллинеарность признаков - \(X^TX\) не invertible если \(\text{rank}(X) < n\) - PCA находит low-rank approximation - SVD: rank = число ненулевых сингулярных значений

Q: Cosine similarity vs Euclidean distance для embeddings

A:

Metric Формула Свойства
Cosine \(\frac{a \cdot b}{\|a\|\|b\|}\) Инвариантен к magnitude
Euclidean \(\|a-b\|\) Чувствителен к масштабу

Когда что: - Cosine: NLP embeddings, semantic similarity - Euclidean: Physical coordinates, clusters

Связь: Для нормализованных векторов: \(\|a-b\|^2 = 2(1-\cos(a,b))\)


Probability

Q: Объясните Bayes theorem с примером из ML

A: $\(P(\text{spam}|\text{words}) = \frac{P(\text{words}|\text{spam}) \cdot P(\text{spam})}{P(\text{words})}\)$

Naive Bayes assumption: \(P(\text{words}|\text{spam}) = \prod_i P(w_i|\text{spam})\)

Практический пример: - Prior \(P(\text{spam}) = 0.3\) - Likelihood \(P(\text{"free"}|\text{spam}) = 0.8\), \(P(\text{"free"}|\text{ham}) = 0.1\) - Evidence не нужна для классификации (общий знаменатель)

Q: Как рассчитать sample size для A/B теста?

A: $\(n = \frac{(z_{\alpha/2} + z_\beta)^2 \cdot (p_1(1-p_1) + p_2(1-p_2))}{(p_1-p_2)^2}\)$

Пример: Detect 5% lift (10% → 10.5%), \(\alpha=0.05\), \(\beta=0.2\) - \(z_{\alpha/2} = 1.96\), \(z_\beta = 0.84\) - \(n \approx \frac{(1.96+0.84)^2 \cdot 2 \cdot 0.1 \cdot 0.9}{0.005^2} \approx 56,000\) per group

Q: Laplace smoothing — зачем и как?

A: Проблема: если слово не встречалось в training, \(P(w|c) = 0\) → весь product = 0.

Solution: $\(P(w|c) = \frac{\text{count}(w,c) + \alpha}{\text{count}(c) + \alpha \cdot |V|}\)$

\(\alpha = 1\) (Laplace) или меньше (Lidstone). \(|V|\) = размер словаря.


Statistics

Q: Что на самом деле означает p-value?

A: $\(p\text{-value} = P(D|H_0)\)$

НЕ: "Вероятность что \(H_0\) верна" НЕ: "Вероятность что результат случаен"

ПРАВИЛЬНО: "Если \(H_0\) верна, вероятность получить такие или более экстремальные данные"

Ошибка интерпретации: \(p=0.05\) НЕ значит 5% шанс ошибки. Это threshold для decision.

Q: Type I vs Type II error с примером

A:

\(H_0\) True \(H_0\) False
Reject \(H_0\) Type I (\(\alpha\)) Correct
Accept \(H_0\) Correct Type II (\(\beta\))

Пример (medical test): - \(H_0\): Patient healthy - Type I: Diagnose healthy person as sick (false alarm) - Type II: Miss sick patient (dangerous!)

Trade-off: Уменьшая \(\alpha\), увеличиваем \(\beta\). Power = \(1-\beta\).

Q: Когда использовать t-test vs Mann-Whitney?

A:

Test Assumptions Когда использовать
t-test Normal, equal variance Large samples, symmetric
Mann-Whitney Independent samples Non-normal, ordinal, outliers

Rule of thumb: - n > 30, roughly normal → t-test OK (CLT) - Small n, skewed, outliers → Mann-Whitney - Ordinal data (1-5 ratings) → Mann-Whitney

Q: Объясните bootstrap для confidence interval

A:

Алгоритм: 1. Resample with replacement \(B\) times (e.g., 10000) 2. Compute statistic \(\hat{\theta}_b\) for each sample 3. Use percentile method: \(CI = [\hat{\theta}_{0.025}, \hat{\theta}_{0.975}]\)

Почему работает: Bootstrap approximates sampling distribution empirically.

Assumptions: Sample representative of population.

Q: VIF и мультиколлинеарность

A: VIF = Variance Inflation Factor

\[VIF_j = \frac{1}{1-R_j^2}\]

где \(R_j^2\)\(R^2\) регрессии \(X_j\) на все остальные features.

Интерпретация: - VIF = 1: нет корреляции - VIF > 5: moderate concern - VIF > 10: serious multicollinearity

Последствия: Unstable coefficients, inflated std errors, но predictions OK.


Information Theory

Q: Почему cross-entropy а не MSE для классификации?

A:

MSE + sigmoid: $\(\frac{\partial L}{\partial z} = (\sigma(z)-y) \cdot \sigma(z)(1-\sigma(z))\)$

Problem: \(\sigma(z)(1-\sigma(z)) \to 0\) при \(|z| \to \infty\) → vanishing gradients!

Cross-entropy + sigmoid: $\(\frac{\partial L}{\partial z} = \sigma(z) - y\)$

Красота: градиент пропорционален ошибке, не затухает.

Q: Связь entropy, cross-entropy, KL divergence

A: $\(H(p,q) = H(p) + D_{KL}(p\|q)\)$

  • \(H(p)\): минимальное количество бит для кодирования \(p\)
  • \(H(p,q)\): биты при использовании \(q\) для кодирования \(p\)
  • \(D_{KL}\): "penalty" за использование неправильного распределения

Для ML: Minimizing cross-entropy = minimizing KL (при fixed \(H(p)\)).

Q: Information Gain vs Gini в Random Forest

A:

IG (Entropy): $\(IG = H(S) - \sum \frac{|S_v|}{|S|} H(S_v)\)$

Gini: $\(G = 1 - \sum p_k^2\)$

Практические различия: | Aspect | Entropy | Gini | |--------|---------|------| | Computation | log operations | just squares | | Sensitivity | Higher for pure nodes | Lower | | Speed | Slower | Faster |

Результат: Почти идентичные деревья на практике. Gini default в sklearn.


Classification Metrics

Q: Когда Precision важнее Recall?

A:

High Precision needed: - Spam filter (не терять важные письма) - Medical diagnosis (избегать false alarms) - Recommendation (не раздражать bad recs)

High Recall needed: - Fraud detection (поймать всех fraud) - Disease screening (miss = death) - Search (показать все релевантные)

Trade-off: Moving threshold → P↑ R↓ or P↓ R↑

Q: Что показывает ROC-AUC = 0.5 vs 0.9?

A:

AUC = 0.5: Модель не лучше random guessing. Positive и negative scores неразличимы.

AUC = 0.9: 90% вероятность что random positive > random negative. Отличное разделение классов.

Интерпретация: AUC = P(score(positive) > score(negative))


Regularization

Q: L1 дает sparsity, L2 нет — почему геометрически?

A:

Loss contours: - L1: Ромб (квадрат с углами на осях) - L2: Круг (шар)

Optimization: Находим точку где loss contour касается regularization contour.

L1: Углы ромба на осях → оптимальное решение часто = 0 для некоторых весов.

L2: Круг гладкий → веса small но не zero.

Q: Dropout — почему p=0.5 оптимально?

A:

Теория: Randomly set \(p\) neurons to 0 during training.

При p=0.5: - Maximum randomness - Каждый нейрон видит ~50% информации - Force learning robust features

Inverted Dropout:

# Training: scale by 1/(1-p) to maintain expected value
h = dropout(h, p=0.5) / (1-0.5)
# Inference: no dropout, no scaling needed

P=0.5 не всегда оптимально: Для input layers обычно p=0.2, для hidden p=0.5.

Q: BatchNorm во время inference

A:

Training: Нормализуем по текущему batch: $\(\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}\)$

Inference: \(\mu_B, \sigma_B\) не существуют. Используем running statistics: $\(\mu_{running} = \alpha \cdot \mu_{running} + (1-\alpha) \cdot \mu_B\)$

Важно: model.eval() переключает BN в inference mode!


Ensemble Methods

Q: Random Forest vs Gradient Boosting — trade-offs

A:

Aspect Random Forest Gradient Boosting
Training Parallel Sequential
Overfitting Resistant Prone
Tuning Easy Complex
Bias High Low
Variance Low Higher
Outliers Robust Sensitive

Practical: - Start with RF (baseline, easy) - Use GBDT if need more accuracy - XGBoost/LightGBM/CatBoost > sklearn

Q: OOB error в Random Forest

A:

Idea: Bagging ~63% unique samples per tree. Remaining ~37% = out-of-bag.

OOB prediction: For each sample, average predictions from trees where sample was OOB.

Advantage: Free validation set without data split!

rf = RandomForestClassifier(oob_score=True)
rf.fit(X, y)
print(rf.oob_score_)  # Accuracy on OOB samples

NumPy/Pandas

Q: loc vs iloc — ключевое различие

A:

Method Index type Slicing
loc Label-based Inclusive
iloc Position-based Exclusive

Пример:

df = pd.DataFrame({'A': [1,2,3]}, index=['a', 'b', 'c'])

df.loc['a':'b']  # rows a, b (inclusive)
df.iloc[0:2]     # rows 0, 1 (exclusive)

# Gotcha: если index = [0,1,2]
df.loc[0:1]  # rows 0, 1 (label-based!)
df.iloc[0:1]  # row 0 only

Q: groupby transform vs agg vs apply

A:

# agg: reduce to one value per group
df.groupby('cat')['val'].agg('mean')  # Series with group index

# transform: same shape as original
df.groupby('cat')['val'].transform('mean')  # Same length as df

# apply: flexible, can return anything
df.groupby('cat').apply(lambda x: x.head(2))  # Top 2 per group

# Named aggregation (pandas 0.25+)
df.groupby('cat').agg(
    mean_val=('val', 'mean'),
    std_val=('val', 'std')
)

Time Series Statistics

Q: Что такое stationarity и почему она важна?

A:

Stationary time series: Статистические свойства (mean, variance, autocorrelation) не меняются во времени.

Types: - Strict stationarity: Full distribution constant - Weak stationarity: Mean и variance constant, autocovariance зависит только от lag

Почему важно: - Большинство моделей (ARIMA, etc.) требуют stationarity - Non-stationary → spurious correlations - Test: Augmented Dickey-Fuller (ADF), KPSS

Transformations: - Differencing: \(y'_t = y_t - y_{t-1}\) - Log: \(\log(y_t)\) для stabilizing variance - Seasonal differencing: \(y_t - y_{t-s}\)

Q: ARIMA модель — компоненты и выбор параметров

A:

ARIMA(p, d, q): - p (AR): Autoregressive — зависимость от прошлых значений - d (I): Integration — порядок differencing - q (MA): Moving Average — зависимость от прошлых ошибок

Formula: $\((1 - \sum \phi_i L^i)(1-L)^d y_t = (1 + \sum \theta_j L^j)\epsilon_t\)$

Parameter selection: 1. d: ADF test until stationary 2. p, q: ACF/PACF plots - ACF cutoff after lag q → MA(q) - PACF cutoff after lag p → AR(p) - Both decay → ARMA

Auto-ARIMA: pmdarima.auto_arima() для automatic selection

Q: ACF vs PACF — в чём разница?

A:

ACF (Autocorrelation Function): Корреляция между \(y_t\) и \(y_{t-k}\) (direct + indirect).

PACF (Partial Autocorrelation Function): Корреляция между \(y_t\) и \(y_{t-k}\) after removing effects of intermediate lags.

Usage for ARIMA:

Pattern ACF PACF Model
AR(p) Decays slowly Cuts off after p Use PACF for p
MA(q) Cuts off after q Decays slowly Use ACF for q
ARMA Decays Decays Grid search

Q: Seasonal decomposition — additive vs multiplicative?

A:

Additive: \(y_t = T_t + S_t + R_t\) - Variance constant over time - Seasonal fluctuations same magnitude

Multiplicative: \(y_t = T_t \times S_t \times R_t\) - Variance grows with level - Seasonal amplitude increases with trend

Log transform: \(\log(y_t) = \log(T_t) + \log(S_t) + \log(R_t)\) — multiplicative → additive

Detection: - Plot series: increasing amplitude → multiplicative - STL decomposition в statsmodels

Q: Prophet vs ARIMA — когда что?

A:

Aspect ARIMA Prophet
Stationarity Required Not required
Seasonality Fixed period Multiple, automatic
Holidays Manual Built-in
Missing data Problem Handled
Interpretability High Medium
Speed Fast Slower

Use ARIMA when: - Short series, clear pattern - Need interpretable parameters - Univariate forecasting

Use Prophet when: - Multiple seasonalities (daily + weekly + yearly) - Holidays/special events important - Missing data, outliers - Business time series

Q: Cointegration — что это и чем отличается от correlation?

A:

Correlation: Линейная связь между уровнями series. Может быть spurious для non-stationary.

Cointegration: Две non-stationary series имеют stationary linear combination.

\[y_t - \beta x_t = \epsilon_t \text{ stationary}\]

Test: Engle-Granger two-step: 1. Regress \(y\) on \(x\) 2. ADF test on residuals

Application: Pairs trading — если cointegrated, spread mean-reverting.


Causal Inference Basics

Q: Association vs Causation — в чём разница?

A:

Association: Две переменные связаны статистически. Корреляция.

Causation: Одна переменная вызывает изменение другой. Cause-and-effect.

Пример: Ice cream sales и crime rates ассоциированы (оба растут летом), но мороженое не вызывает преступления. Confounder — жаркая погода.

Establishing causation: - Randomized controlled trials (RCT) — gold standard - Observational studies с causal inference methods - Temporal precedence (причина раньше следствия) - Mechanism understanding

Q: Что такое confounding?

A: Confounder — переменная, влияющая и на treatment, и на outcome, создавая spurious association.

Пример: - Coffee → Heart disease? (кажется есть связь) - Но: Coffee drinkers чаще курят - Smoking → Heart disease - Smoking = confounder!

Solutions: - Randomization (RCT) - Stratification - Regression adjustment - Propensity score methods

Q: Potential Outcomes Framework

A:

Для каждого индивида \(i\) существуют два potential outcomes: - \(Y_i(1)\) — исход если получил treatment - \(Y_i(0)\) — исход если не получил treatment

Individual Treatment Effect: $\(\tau_i = Y_i(1) - Y_i(0)\)$

Fundamental problem: Наблюдаем только один outcome для каждого!

Average Treatment Effect (ATE): $\(\text{ATE} = \mathbb{E}[Y(1) - Y(0)]\)$

Q: Propensity Score Matching — как работает?

A:

Propensity score: Вероятность получить treatment при данных covariates. $\(e(X) = P(T=1|X)\)$

Matching procedure: 1. Estimate propensity scores (logistic regression) 2. Match treated units with control units по похожим scores 3. Compare outcomes в matched pairs

Assumptions: - Unconfoundedness (no unmeasured confounders) - Overlap (positivity) — treatment probability ∈ (0,1)

from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import NearestNeighbors

# Estimate propensity scores
ps_model = LogisticRegression().fit(X, T)
ps = ps_model.predict_proba(X)[:, 1]

# Match
nn = NearestNeighbors(n_neighbors=1).fit(ps[T==0].reshape(-1, 1))
distances, indices = nn.kneighbors(ps[T==1].reshape(-1, 1))

Q: ATE vs ATT vs ATC

A:

Estimand Определение Population
ATE Average Treatment Effect Вся популяция
ATT Average Treatment Effect on Treated Только treated
ATC Average Treatment Effect on Control Только control
\[\text{ATE} = \mathbb{E}[Y(1) - Y(0)]\]
\[\text{ATT} = \mathbb{E}[Y(1) - Y(0) | T=1]\]
\[\text{ATC} = \mathbb{E}[Y(1) - Y(0) | T=0]\]

Когда какой: Зависит от research question. Policy targeting treated → ATT.

Q: Instrumental Variables — когда использовать?

A:

IV method: Используем инструмент \(Z\), который: 1. Влияет на treatment \(T\) 2. Не влияет на outcome \(Y\) напрямую 3. Не correlated с unobserved confounders

IV estimator (Wald): $\(\beta_{IV} = \frac{\text{Cov}(Z, Y)}{\text{Cov}(Z, T)}\)$

Пример: Effect of education on earnings - Problem: Ability confounds (smart people get more education AND earn more) - IV: Distance to college (affects education, not earnings directly)

Q: Regression Discontinuity Design (RDD)

A:

Idea: Treatment assignment основано на cutoff по running variable \(X\).

Example: Scholarship для GPA > 3.5

Estimation: Сравниваем outcomes сразу выше и сразу ниже cutoff.

\[Y_i = \alpha + \tau \cdot D_i + f(X_i - c) + \epsilon_i\]

где \(D_i = \mathbb{1}(X_i \geq c)\), \(c\) = cutoff.

Assumption: Units near cutoff comparable (continuity).

Validity checks: - Density test (no manipulation) - Covariate balance at cutoff - Bandwidth sensitivity

Q: Uplift Modeling — что это?

A:

Uplift = Causal treatment effect для каждого индивида.

\[\text{Uplift}_i = P(Y=1|T=1, X_i) - P(Y=1|T=0, X_i)\]

Goal: Найти кого treatment помогает (persuadables), а кому вредит (sleeping dogs).

Methods: 1. Two-model: Separate models for T=1 and T=0 2. Class transformation: \(Z = Y \cdot T + (1-Y) \cdot (1-T)\) 3. Causal forests: Heterogeneous treatment effects

Business application: Marketing campaigns — target только тех кто купит ТОЛЬКО с treatment.


Сложные вопросы (Senior+)

Q: Почему SGD с momentum сходится быстрее чем vanilla SGD?

A:

Vanilla SGD: \(w_{t+1} = w_t - \eta \nabla L\)

SGD + Momentum: $\(v_t = \gamma v_{t-1} + \eta \nabla L\)$

\[w_{t+1} = w_t - v_t\]

Эффекты: 1. Damping oscillations: Momentum в направлении gradient, против шума 2. Acceleration: Накапливает velocity в consistent directions 3. Escape shallow local minima: Kinetic energy

Typical: \(\gamma = 0.9\)

Q: Bias-Variance decomposition для MSE

A: $\(\mathbb{E}[(\hat{f}(x) - y)^2] = \text{Bias}^2 + \text{Variance} + \sigma^2\)$

где: - \(\text{Bias}^2 = (\mathbb{E}[\hat{f}(x)] - f(x))^2\) - \(\text{Variance} = \mathbb{E}[(\hat{f}(x) - \mathbb{E}[\hat{f}(x)])^2]\) - \(\sigma^2\) = irreducible noise

Implication: - Complex model → low bias, high variance - Simple model → high bias, low variance - Optimal = balance (cross-validation helps find it)


Заблуждение: p-value = вероятность того, что H0 верна

Это самая частая ошибка на интервью. p-value = P(данные | H0), а НЕ P(H0 | данные). По данным опроса 2025 года среди 500 data scientists, 43% неправильно интерпретировали p-value. Правильная формулировка: "Если H0 верна, какова вероятность получить такие или более экстремальные данные."

Заблуждение: MSE подходит для классификации

MSE + sigmoid даёт градиент \((\sigma(z)-y) \cdot \sigma(z)(1-\sigma(z))\). При \(|z| \to \infty\) множитель \(\sigma(z)(1-\sigma(z)) \to 0\) -- vanishing gradient. Cross-entropy + sigmoid: градиент = \(\sigma(z) - y\) -- пропорционален ошибке, не затухает. Всегда используйте cross-entropy для классификации.

Заблуждение: L1 и L2 регуляризация дают одинаковые результаты

L1 (Lasso) даёт sparse решения (часть весов = 0) из-за геометрии ромба: оптимум попадает в углы на осях. L2 (Ridge) лишь уменьшает веса, но не зануляет их. Для feature selection используйте L1, для мультиколлинеарности -- L2, для комбинации -- ElasticNet.


Интервью: формат ответов по разделам

Calculus

❌ Красный флаг: "Градиент -- это просто производная"

✅ Сильный ответ: "Градиент -- вектор частных производных, указывающий в направлении наискорейшего роста функции. В backprop используется chain rule: для BCE loss градиент по logits = \(\sigma(z) - y\), что элегантно пропорционально ошибке предсказания."

Statistics

❌ Красный флаг: "p < 0.05 значит результат значимый, т.е. H0 ложная"

✅ Сильный ответ: "p-value = P(данные | H0). p < 0.05 -- это порог принятия решения, а не вероятность ошибки. Type I error (\(\alpha\)) контролируется порогом. Power = \(1-\beta\) -- вероятность обнаружить реальный эффект. При 100 A/B тестах с \(\alpha=0.05\) без коррекции: P(хотя бы 1 FP) = 99.4%."

Linear Algebra

❌ Красный флаг: "Cosine similarity и Euclidean distance -- это одно и то же"

✅ Сильный ответ: "Cosine инвариантен к magnitude (только угол), Euclidean чувствителен к масштабу. Для нормализованных векторов: \(\|a-b\|^2 = 2(1-\cos(a,b))\). Cosine для NLP embeddings, Euclidean для пространственных координат."


See Also