Математика для 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\))
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))]\)$
Красота: градиент равен ошибке предсказания! Это делает обучение стабильным.
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
где \(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.
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 |
Когда какой: Зависит от 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.
где \(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 для каждого индивида.
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\)$
Эффекты: 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
- Формулы: линал — SVD, собственные значения, проекции
- Формулы: матан — Производные, градиенты, ряды Тейлора
- Формулы: теорвер — Байес, ЦПТ, распределения
- Формулы: статистика — МНК, гипотезы, bootstrap
- Классический ML — Алгоритмы ML
- ML алгоритмы (справочник) — Все формулы