Sample report

Sample data for a fictional student, from a scripted interview. The report was written by the same pipeline that writes yours.

ML theory interview

Machine Learning, regular level, six questions, Oct 24, 2026

Hire

If you read nothing else

At the Regular bar in this interview.

  • Strength: Evaluation reasoning is genuinely strong: you rejected accuracy, then rejected ROC AUC at 0.1% positives, and moved to PR-AUC, cost-based thresholds and calibration without being told the answer.

    precision and recall are better here: PR AUC, and precision at the recall the business needsYour words, 6:50
  • Strength: You recover well from hints: one nudge about the constraint region was enough for a complete, correct explanation of L1 sparsity.

    To prevent it: more data, or data augmentation for images and text. Regularization, L1, L2, dropout, weight decay. Early stopping on a validation set.Your words, 12:09
  • Gap: Lead with the mechanism, not the history.

One moment from your delivery

You hesitated and used hedging phrases

When asked “Mm-hm. That's the classical picture. Large neural networks don't always follow it....” (Q1), you hesitated and used hedging phrases: you took 6.4 s to start (your usual 3.2 s); a 3.3 s pause mid-answer; you slowed to 110 words per minute (your usual 151); 3 hedges such as 'I don't know'.

  • Time to start 6.4 s vs your usual 3.2 s
  • Longest pause 3.3 s
  • Words per minute 110 vs your usual 151
  • Hedging 3 (“I don't know”, “kind of”, “I guess”)
Hmm, I've heard of it, but I don't know it well.Your words, 5:03

Try: Start with a one-line headline ('My approach is X because Y') and think aloud from there instead of in silence.

Your next task, 20 min

Lead with the mechanism, not the history

Take 5 ML questions you know well and answer each in 60 seconds, mechanism first, history only if asked. Record all five and listen back once.

What happened

You covered all six topics and the session ran to the end. Fundamentals were solid and you backed several answers with your own thesis work: the leakage story, the cost-based threshold, the time-based splits. The weaker moments were double descent, where you knew the shape but not the reason, and AdamW, where you lost the direction. Your transformer explanation was strong once you stopped on the history and started on the mechanism.

At the bar

You are at the bar on core fundamentals, evaluation and practical judgment, with real project evidence; you are just under it on a few deeper internals (double descent, AdamW) and on getting to the mechanism without a detour.

You answered all 6 planned questions.

After that

More ways to practice, in order of impact.

  1. 1

    Fix the direction on weight decay in Adam: From memory, write in five lines how L2 inside Adam differs from AdamW, then check against the paper or docs and correct the direction. 20 minutes.

  2. 2

    Build a test set you never look at: Label 50 recipes once, save them, and score your model on them a single time without editing prompts in between. 25 minutes.

Scorecard

Each skill from the rubric, scored 1 to 5, with the moments it was based on.

  • Your core answers were right, but three points stayed open at the end. When you notice a claim you cannot defend, say what you do know and flag the uncertainty in one clause instead of trailing off.

    precision and recall are better here: PR AUC, and precision at the recall the business needsYour words, 6:50
    With a diamond, the first touch is very likely at a corner, and corners are on the axes, so some weights are exactly zero.Your words, 17:34

    What good looks like: Every claim correct on the first pass, including the rare-positive metric choice, and precise statements about AdamW and double descent rather than hedged approximations.

    To reach 5: precise and correct, including edge cases.

    Re-derive three things out loud from memory: why ROC AUC misleads at 0.1% positives, the L1 corner argument, and what AdamW changes versus L2 in Adam.

  • You go well past definitions into internals and trade-offs, which is exactly what this level needs. Close the two theory holes you hedged on, double descent and decoupled weight decay, so you can state them without a caveat.

    Dividing by the square root of d brings the variance back to about one.Your words, 28:47
    I'm not fully sure I have the direction right.Your words, 19:52

    What good looks like: Same level of mechanism on the topics you were shaky on: explain why test error peaks near the interpolation point, and state exactly how Adam's adaptive scaling interacts with an L2 penalty.

    To reach 5: explains internals, trade-offs and failure modes.

    Pick the two topics you hedged on and write a five-sentence explanation of each, including one failure mode, then say it aloud without notes.

  • You reason from real experience and business constraints rather than textbooks, which is a genuine strength. The one place you did not apply your own standards was your side project, where you admitted the test set was contaminated by your own inspection.

    I'd pick the threshold that minimizes expected cost on a validation set.Your words, 7:41
    it turned out the last status update could be the delivered event itselfYour words, 13:14

    What good looks like: Already there: you tie choices to business cost, review capacity, label delay and your own debugging experience rather than textbook defaults.

    To reach 5: clear on when and why to use it, with experience-based reasoning.

    Keep this strength; next time open the fraud answer with the cost and capacity framing before the metrics, so the reasoning leads.

  • Your answers are clear and well ordered when you start with the mechanism. On the transformer question you spent your opening on the history of the field and had to be cut off; lead with how the thing works and add context only if asked.

    Each token is embedded and gets positional information added, since attention itself has no order.Your words, 25:25
    before transformers, the standard was RNNs and LSTMs, and, uh, they had attention added on top for translationYour words, 24:59

    What good looks like: Answer the question asked in the first sentence every time, then add context only if it earns its place; the transformer walkthrough you gave after the redirect is the target throughout.

    To reach 5: concise, structured, easy to follow.

    For each answer, say the mechanism or the decision in sentence one, and hold history or background until after that.

Also went well

  • You ground answers in your own work with numbers and caveats, such as PR-AUC moving from 0.38 to 0.41 and the distribution shift from the routing change.

Also to improve

  • Close the theory you hedge on. Double descent and the AdamW versus L2-in-Adam distinction both ended with 'I'm not fully sure', which is avoidable for two well-documented topics.
  • Apply your own evaluation standards to your side project. You correctly diagnosed that your 85% figure is optimistic because you labelled and inspected the test set, but you had not fixed it.

Red flags

  • Your side project's headline number comes from a test set you wrote and repeatedly looked at, so it is not a real measurement yet.
  • Two answers ended with an explicit uncertainty about direction (AdamW, double descent mechanism) rather than a bounded statement of what you did know.

Question by question

Open a question to see which key points you covered, in your own words, and what a stronger answer sounds like.

  1. Your answer: You defined bias as error from assumptions that are too simple and variance as sensitivity to the training sample, gave the squared-error split, and diagnosed by comparing training and validation error against a reference. You described both learning-curve shapes, applied them to a 2%/11% case, placed bagging and boosting, and said plainly that you only knew the shape of double descent.

    Key points

    • Bias = high train and validation error, variance = big gap (Covered)

      If both are high and close to each other, that's bias. If training is low and validation is much higher, that's variance.Your words, 1:55
    • Learning curves, regularization, more data, early stopping (Covered)

      Then regularization, stronger L2 or dropout, or for trees, shallower trees and fewer leaves, and early stopping.Your words, 4:00

    A stronger answer

    Bias is error from assumptions that are too simple, so the model misses the real pattern; variance is error from being too sensitive to the particular training sample. For squared error that shows up as bias squared plus variance plus noise, and I diagnose it by comparing training and validation error against a reference, like a baseline. If both curves are high, flat and close together as I add data, that's bias and more data will not help. If training is low and there is a big gap that keeps closing with more data, that's variance. On the 2% train, 11% validation case where doubling data moved validation to 9%, I'd first check leakage or a distribution mismatch because 2% training error is suspiciously low, then add regularization, early stopping or simpler trees, and get more data if it is cheap. Ensembling fits here too: bagging like a random forest cuts variance, boosting cuts bias. And past the interpolation point, where parameters roughly equal examples, test error can peak and then fall again, which is the double descent picture.

    Common mistakes on this question

    • Assuming more data fixes every gap, when a high-bias model whose curves have already converged gains nothing from it.
    • Quoting the double-descent shape without being able to say what it implies for model size or why it happens.
  2. Your answer: You opened with ROC AUC, then corrected to PR AUC and precision at the recall the business needs, explaining why the false positive rate hides thousands of false alarms at 0.1%. You set the threshold by business cost or review capacity, split by time and card, used class weights or train-only undersampling with recalibration, and checked calibration on quantile bins.

    Key points

    • Accuracy is useless; precision, recall, PR-AUC; cost-based thresholding by business costs; calibration. (Covered)

      precision and recall are better here: PR AUC, and precision at the recall the business needsYour words, 6:50
    • Class weights, resampling on train only, time-based splits (Covered)

      Class weights first, it's the simplest. Or undersample the negatives. But only in the training set, never in validation or testYour words, 9:40

    Common mistakes on this question

    • Leading with ROC AUC at 0.1% positives, where the false positive rate stays tiny while there are thousands of false alarms.
    • Resampling or reweighting before splitting, which inflates precision and recall on the test set.
  3. Your answer: You defined overfitting as learning noise, listed more data, augmentation, L1/L2, dropout, weight decay, early stopping, simpler models and cross-validation, and explained dropout at training versus inference. Asked about great validation and terrible production, you went to leakage first, told the thesis example with its real numbers, and described expanding-window validation and how to choose regularization strength.

    Key points

    • More data, regularization, early stopping, simpler models, augmentation, CV (Covered)

      To prevent it: more data, or data augmentation for images and text. Regularization, L1, L2, dropout, weight decay. Early stopping on a validation set.Your words, 12:09
    • Leakage can masquerade as great generalization (Covered)

      first I'd check for leakage. If validation is suspiciously great, maybe a feature has information from the futureYour words, 13:14

    Follow-up questions

    • what dropout does during training and what changes at inference Handled wellZeroing units during training, nothing dropped at inference because the scaling is already corrected.
    • great validation score, terrible production: what do you check first Handled wellYou went to leakage first, with a concrete example from your own work.
    • how you found the leak Handled wellFeature importance flagged one feature, and you confirmed it by checking timestamps by hand.
    • how to catch train/serve feature skew before launch Handled wellOne shared feature code path, distribution comparisons and shadow mode, with an honest note that shadow was new to you.

    Common mistakes on this question

    • Shuffling time-ordered rows in k-fold and reporting a score that partly comes from training on the future.
  4. Your answer: You described L1 as absolute weights and L2 as squares, then after the hint on the constraint region gave the diamond-versus-circle argument for exact zeros and tied it to the constant gradient. You covered correlated features, elastic net, the Laplace-versus-Gaussian prior view, when sparsity hurts, and were honest that the AdamW direction was shaky.

    Key points

    • Diamond region, corners give exact zeros; L2 shrinks smoothly (Covered)

      With a diamond, the first touch is very likely at a corner, and corners are on the axes, so some weights are exactly zero.Your words, 17:34
    • Laplace versus Gaussian prior, elastic net, correlated features (Covered)

      L2 is a Gaussian prior on the weights, L1 is a Laplace prior. The Laplace prior has a sharp peak at zeroYour words, 18:52

    Follow-up questions

    • think about the shape of the constraint region Handled wellThe hint unlocked the right argument, and you also reconnected it to your own gradient intuition.
    • two features that are almost copies of each other Handled wellL1 picks one arbitrarily, L2 splits the weight, elastic net keeps the correlated group together.
    • a probabilistic way to see the difference Handled wellLaplace versus Gaussian prior, tied back to the sharp peak at zero and the sparsity.
    • when would you not want a sparse model Handled wellMany weak signals, unstable selections between retrains, and an accuracy cost.

    A stronger answer

    L1 adds the sum of absolute weights to the loss and L2 adds the sum of squares. L2 shrinks all weights smoothly toward zero but almost never to exactly zero, while L1 sets many exactly to zero, so it does feature selection. The geometric reason is that the L1 constraint region is a diamond and the L2 one is a ball: the loss ellipses expand until they touch the region, and a diamond is most likely first touched at a corner, which sits on an axis, so some weights are exactly zero. The gradient view is the same idea from the other side: L1 pushes with constant force even for small weights, while L2's push fades to nothing near zero. With two nearly identical features, L1 picks one, somewhat arbitrarily, and zeroes the other, L2 splits the weight, and elastic net keeps correlated groups together. Probabilistically, L2 is a Gaussian prior and L1 a Laplace prior with a sharp peak at zero, which matches the sparsity. I'd avoid sparsity when many features each carry a little signal or when correlated groups make the selection unstable between retrains. In deep learning with Adam I'd use AdamW, because an L2 penalty inside Adam gets scaled by the adaptive part, whereas AdamW decays the weights directly.

    Common mistakes on this question

    • Saying L1 zeroes weights because its gradient is constant and stopping there, without the geometry of the constraint region.
    • Claiming L2 produces exact zeros, or that a sparse model is always better because it is more interpretable.

    Hints used: 1

  5. Key points

    • Bagging decorrelated trees cuts variance; boosting fits residuals, cuts bias (Covered)

      That mostly reduces variance, because the trees are decorrelated ... Gradient boosting trains shallow trees one after the other, each one fitting the residual errorsYour words, 21:02
    • Boosting wins on tabular accuracy, is more tuning- and noise-sensitive (Covered)

      I'd pick boosting when I want the best accuracy on tabular data and have time to tune it ... Random forest when I want something robust with almost no tuning, or the labels are noisyYour words, 21:02

    Common mistakes on this question

    • Mixing up which ensemble attacks which error, saying boosting reduces variance or bagging reduces bias.
    • Trusting default impurity importances, which split credit between correlated features and favour high-cardinality ones.
  6. Your answer: You opened with the history and were redirected to walk through one layer, which you then did: embeddings, positional information, self-attention, multi-head, feed-forward, residuals and layer norm. You covered parallel training, long-range dependencies, quadratic cost, the square-root scaling, the KV cache, and admitted your side project's test set was self-labelled and probably optimistic.

    Key points

    • Self-attention, multi-head, positional info, feed-forward, residuals and layer norm (Covered)

      every token makes a query, a key and a value, the attention weights are a softmax of the query dot the keys ... residual connections and layer norm around bothYour words, 25:25
    • Parallel training, long-range dependencies, quadratic attention cost (Covered)

      Training parallelizes over the sequence, an RNN has to go step by step ... attention is quadratic in sequence length, in compute and memoryYour words, 26:14

    Follow-up questions

    • less history, explain one layer step by step Partly handledOnce redirected your walkthrough was accurate and complete, but the first turn went to the history of the field.
    • why the transformer replaced RNNs Handled wellParallel training over the sequence and one-step long-range dependencies, with quadratic cost as the trade-off.
    • what multi-head attention buys over one big head Handled wellSeveral attention distributions instead of one, with a fair caveat that heads can be pruned.
    • what the options for positional information are Handled wellSinusoids, learned positions and relative approaches like RoPE, with an honest limit on deriving it.

    A stronger answer

    I'd walk through one layer rather than the history: each token is embedded and gets positional information added, since attention alone has no order. Then self-attention makes a query, a key and a value per token, the weights are a softmax of query dot keys scaled by the square root of the head dimension, and the output is a weighted sum of values, with multi-head doing this several times in parallel so different heads can produce different distributions. After attention there is a feed-forward network per position, with residual connections and layer norm around both blocks, and decoder-only models add a causal mask so a token only sees the past. The square-root scaling matters because a dot product of d unit-variance components has variance around d, which would push the softmax to almost one-hot and make gradients tiny. Transformers replaced RNNs because training parallelises over the sequence and any token can attend to any other in one step, at the cost of attention being quadratic in sequence length. For generation, the KV cache keeps the keys and values of previous tokens so each step only processes the new token, and for thirty-two layers, model dimension four thousand and four thousand tokens in fp16 that comes to about two gigabytes. For my ingredient tagging I'd try an encoder like BERT with a token classification head first, since it is cheaper and easy to score per token, and evaluate on a held-out labelled set I don't look at while writing prompts.

    Common mistakes on this question

    • Starting with the history of the field instead of walking through a single layer step by step.
    • Describing attention without the residual connections, layer norm and feed-forward block, or forgetting the quadratic cost.

Every key point you were asked about, with what you said.

Key points, one by one

  • 1Bias = high train and validation error, variance = big gapStrong
    If both are high and close to each other, that's bias. If training is low and validation is much higher, that's variance.Your words, 1:55
  • 1Learning curves, regularization, more data, early stoppingStrong
    Then regularization, stronger L2 or dropout, or for trees, shallower trees and fewer leaves, and early stopping.Your words, 4:00
  • 2Accuracy is useless; precision, recall, PR-AUC; cost-based thresholding by business costs; calibration.Strong
    precision and recall are better here: PR AUC, and precision at the recall the business needsYour words, 6:50
  • 2Class weights, resampling on train only, time-based splitsStrong
    Class weights first, it's the simplest. Or undersample the negatives. But only in the training set, never in validation or testYour words, 9:40
  • 3More data, regularization, early stopping, simpler models, augmentation, CVStrong
    To prevent it: more data, or data augmentation for images and text. Regularization, L1, L2, dropout, weight decay. Early stopping on a validation set.Your words, 12:09
  • 3Leakage can masquerade as great generalizationStrong
    first I'd check for leakage. If validation is suspiciously great, maybe a feature has information from the futureYour words, 13:14
  • 4Diamond region, corners give exact zeros; L2 shrinks smoothlyStrong
    With a diamond, the first touch is very likely at a corner, and corners are on the axes, so some weights are exactly zero.Your words, 17:34
  • 4Laplace versus Gaussian prior, elastic net, correlated featuresStrong
    L2 is a Gaussian prior on the weights, L1 is a Laplace prior. The Laplace prior has a sharp peak at zeroYour words, 18:52
  • 5Bagging decorrelated trees cuts variance; boosting fits residuals, cuts biasStrong
    That mostly reduces variance, because the trees are decorrelated ... Gradient boosting trains shallow trees one after the other, each one fitting the residual errorsYour words, 21:02
  • 5Boosting wins on tabular accuracy, is more tuning- and noise-sensitiveStrong
    I'd pick boosting when I want the best accuracy on tabular data and have time to tune it ... Random forest when I want something robust with almost no tuning, or the labels are noisyYour words, 21:02
  • 6Self-attention, multi-head, positional info, feed-forward, residuals and layer normStrong
    every token makes a query, a key and a value, the attention weights are a softmax of the query dot the keys ... residual connections and layer norm around bothYour words, 25:25
  • 6Parallel training, long-range dependencies, quadratic attention costStrong
    Training parallelizes over the sequence, an RNN has to go step by step ... attention is quadratic in sequence length, in compute and memoryYour words, 26:14

Practice next: Accuracy · 3 of 5

Re-derive three things out loud from memory: why ROC AUC misleads at 0.1% positives, the L1 corner argument, and what AdamW changes versus L2 in Adam.

Coaching

The few changes that matter most, with a way to practice each one.

  1. 1Communication

    Lead with the mechanism, not the history

    On the transformer question you opened with the history of RNNs and attention papers and the interviewer cut in to ask for the mechanism. Starting with how the thing works makes your answer easy to follow and protects your time budget.

    before transformers, the standard was RNNs and LSTMs, and, uh, they had attention added on top for translationYour words, 24:59

    How to practice: Pick 3 questions you know well. For each, write the one-sentence mechanism answer first, then add history only if asked. Record yourself, 60 seconds per answer, 15 minutes total.

  2. 2Depth

    Fix the direction on weight decay in Adam

    You had the right pieces on AdamW but flagged that you might have the direction backwards, which is the one place in the interview where you trailed off mid-explanation. Getting this crisp turns a shaky answer into a strong one.

    With Adam it's different, I know AdamW exists because of this ... I'm not fully sure I have the direction right.Your words, 19:52

    How to practice: From memory, write in five lines how L2 inside Adam differs from AdamW, then check against the paper or docs and correct the direction. 20 minutes.

  3. 3Practical judgment

    Build a test set you never look at

    You said your ingredient-tagging score is probably optimistic because you labelled the test set yourself and looked at those examples while prompting. A held-out set you touch once is the cheapest fix and a good story to tell.

    I should have a test set I don't look at.Your words, 31:21

    How to practice: Label 50 recipes once, save them, and score your model on them a single time without editing prompts in between. 25 minutes.

  • I'm not fully sure I have the direction right.Your words, 19:52

    With L2 inside Adam the penalty gradient goes through the adaptive scaling, so it is effectively weakened; AdamW applies the decay directly to the weights, outside that scaling. I'd double-check the exact form before relying on it.

    You had the mechanism; stating it and flagging uncertainty once sounds far more solid than trailing off.

  1. Day 1Record 60-second mechanism-first answers to 3 ML questions15 min
  2. Day 2Rest, or re-listen to one recording and note your first sentence5 min
  3. Day 3Write AdamW vs L2-in-Adam from memory, then check and correct20 min
  4. Day 4Rest day5 min
  5. Day 5Label 50 recipes once and score your model on them once25 min
  6. Day 6Explain double descent out loud in 90 seconds, including the reason10 min
  7. Day 7Timed set of 5 questions, mechanism first, no history openers20 min

Pace, pauses, fillers and pitch, measured from your voice. Signals, not judgments.

Moments worth a look

  • You hesitated and used hedging phrases

    When asked “Mm-hm. That's the classical picture. Large neural networks don't always follow it....” (Q1), you hesitated and used hedging phrases: you took 6.4 s to start (your usual 3.2 s); a 3.3 s pause mid-answer; you slowed to 110 words per minute (your usual 151); 3 hedges such as 'I don't know'.

    • Time to start 6.4 s vs your usual 3.2 s
    • Longest pause 3.3 s
    • Words per minute 110 vs your usual 151
    • Hedging 3 (“I don't know”, “kind of”, “I guess”)
    Hmm, I've heard of it, but I don't know it well.Your words, 5:03

    Try: Start with a one-line headline ('My approach is X because Y') and think aloud from there instead of in silence.

  • You hesitated and used hedging phrases

    When asked “Okay. Same idea in deep learning, where most people train with Adam....” (Q4), you hesitated and used hedging phrases: you took 7.2 s to start (your usual 3.2 s); a 3.1 s pause mid-answer; you slowed to 106 words per minute (your usual 151); 2 hedges such as 'kind of'.

    • Time to start 7.2 s vs your usual 3.2 s
    • Longest pause 3.1 s
    • Words per minute 106 vs your usual 151
    • Hedging 2 (“kind of”, “sort of”)
    With plain SGD that's, kind of, the same as L2 regularization.Your words, 19:52

    Try: Start with a one-line headline ('My approach is X because Y') and think aloud from there instead of in silence.

  • Your delivery got bumpy and you sped up

    When asked “Last topic, deep learning. Explain how a transformer works and why it...” (Q6), your delivery got bumpy and you sped up: 12 fillers per minute: 'uh' (1), 'um' (1), 'you know' (1); you sped up to 183 words per minute (your usual 151).

    • Fillers per minute 12.2 (“uh”, “um”, “you know”)
    • Words per minute 183 vs your usual 151
    Okay, so, um, before transformers, the standard was RNNs and LSTMs, and, uh, they had attention added onYour words, 24:59

    Try: Swap fillers for a short silent pause; say this answer once more out loud and listen for them.

Voice signals

Measured in 49 of 52 answers with audio.

  • Your pitch went up at 20 of 333 measured phrase endings.

3 of 52 answers did not have enough clear audio to measure (background noise).

You hedge mid-sentence a lot ('kind of', 'sort of'); say the claim plainly, then add at most one hedge at the end.

When a question is unfamiliar, give the part you do know in one sentence and stop, as you did on double descent, instead of trailing off.

Pace, pauses and fillers

Measured across 52 answers: average speaking rate 142 wpm, 1.1 fillers per speaking minute, average time to start answering 3.5 s, longest mid-answer pause 3.6 s.

Pace
142words/min
Fillers
1.1per min
Longest pause
3.6s
Time to first word
3.5s
Average before you started answering
Speaking time
84%
Share of answer time spent speaking
Hedges
31
Phrases like "I think" or "maybe"

Answer by answer

Pause Strong Hesitation Rushing Trailing off Rambling

The answers with a marked moment. Notes on single answers use typical speaking ranges.

Question 1

  • 0s41s
    Length
    41s
    Pace
    110
    To first word
    6.4s
    Fillers
    2
    Hedges
    4
    Pauses
    1
    • Hesitation (0s to 16s): Start came after 6.4 s, with 2 fillers and 4 hedge phrases in the answer.
    • Trailing off (31s to 41s): Voice level over the last 10 s was about 7 dB lower than earlier in the answer.
  • 0s23s
    Length
    23s
    Pace
    114
    To first word
    5.0s
    Fillers
    1
    Hedges
    2
    Pauses
    0
    • Hesitation (0s to 15s): Start came after 5.0 s, with 1 filler and 2 hedge phrases in the answer.

Question 3

  • 0s38s
    Length
    38s
    Pace
    124
    To first word
    5.4s
    Fillers
    1
    Hedges
    2
    Pauses
    1
    • Hesitation (0s to 15s): Start came after 5.4 s, with 1 filler and 2 hedge phrases in the answer.

Question 4

  • 0s60s
    Length
    60s
    Pace
    106
    To first word
    7.2s
    Fillers
    1
    Hedges
    3
    Pauses
    2
    • Hesitation (0s to 17s): Start came after 7.2 s, with 1 filler and 3 hedge phrases in the answer.
    • Trailing off (46s to 60s): Voice level over the last 14 s was about 8 dB lower than earlier in the answer.

Question 5

  • 0s46s
    Length
    46s
    Pace
    122
    To first word
    5.6s
    Fillers
    0
    Hedges
    3
    Pauses
    1
    • Hesitation (0s to 16s): Start came after 5.6 s, with 0 fillers and 3 hedge phrases in the answer.

Question 6

  • 0s42s
    Length
    42s
    Pace
    119
    To first word
    5.6s
    Fillers
    1
    Hedges
    2
    Pauses
    1
    • Hesitation (0s to 16s): Start came after 5.6 s, with 1 filler and 2 hedge phrases in the answer.
  • 34 steady stretches noted.
  • 7 hesitation episodes noted.
  • 3 trailing-off endings noted.

What Alex wrote down while listening.

  1. ClaimQuestion 11:55

    Correct decomposition and train/validation diagnosis with a reference error level.

  2. GapQuestion 15:03

    Double descent: knew the shape, not the reason.

  3. GapQuestion 26:26

    Proposed ROC AUC for 0.1% positives.

  4. ClaimQuestion 26:50

    Corrected to PR AUC with the FPR argument after one question.

  5. ClaimQuestion 27:41

    Cost-based threshold, review capacity, calibration.

  6. ClaimQuestion 29:40

    Resampling only on train, recalibrate afterwards.

  7. ClaimQuestion 211:18

    Time split and delayed chargeback labels; unsure how to detect new patterns early.

  8. ClaimQuestion 313:14

    Named leakage, with a real example from the thesis.

  9. GapQuestion 314:38

    Shadow mode named but not used in practice.

  10. ClaimQuestion 315:12

    Expanding-window validation on time-ordered data; driver leakage left unsolved.

  11. GapQuestion 419:52

    AdamW versus L2 in Adam: rough idea, unsure of the direction.

  12. ClaimQuestion 522:27

    Default direction for missing values; lambda, alpha, gamma named.

  13. GapQuestion 624:59

    Started with history instead of the mechanism; interrupted.

  14. ClaimQuestion 628:47

    Variance argument for the square-root scaling, correct.

  15. ClaimQuestion 630:12

    KV cache size estimated at about 2 GB with a stated formula; Youdged.

  16. GapQuestion 631:21

    Side project evaluated on a self-labelled set you had looked at.

One more note.

More next steps

  • You hedge mid-sentence a lot ('kind of', 'sort of'); say the claim plainly, then add at most one hedge at the end.

105 turns, word for word.

  1. Alex0:02

    Hi, I'm Alex. This is the ML fundamentals round, about thirty-five minutes. I'll ask six questions across the core topics, and dig into each one a bit, sometimes with a small scenario. If you don't know something, saying so is fine, and I'll move on. I may also cut in to keep us on time. There's no code here, just talk me through your thinking. Before we start, what are you working on at the moment?

  2. You0:31

    Hi. So I'm finishing my master's at Lakeview State, in data science. My thesis is on predicting late deliveries for a regional grocery delivery company, Greenbasket, it's a partnership through the department. Mostly tabular data, gradient boosting, and, um, a lot of fighting with the data, honestly. Timestamps in three different time zones. And I'm doing a small side project fine-tuning a small language model to tag recipe ingredients, mostly to learn how that works.

  3. Alex1:04

    Okay. How big is the delivery dataset, and how often are deliveries actually late?

  4. You1:09

    About four hundred thousand deliveries over eighteen months, and around six percent are late, which is the positive class.

  5. Alex1:20

    What counts as late, exactly? Someone had to decide that.

  6. You1:24

    More than fifteen minutes after the promised window ends. The company picked that. I asked about it, and it's what triggers a refund voucher, so it's the business definition, not mine. Though if you move it to ten minutes the positive rate almost doubles, so the threshold matters a lot.

  7. Alex1:49

    Thanks. First question. Explain the bias-variance trade-off and how you diagnose which problem your model has.

  8. You1:55

    So, bias is error from the model being too simple, or having the wrong assumptions, so it misses the real pattern. Variance is error from being too sensitive to the particular training set, so if you trained on a different sample you'd get a quite different model. For squared error the expected test error splits into bias squared plus variance plus irreducible noise. To diagnose it, um, I compare training and validation error. If both are high and close to each other, that's bias. If training is low and validation is much higher, that's variance. And you need some reference for high, like a baseline or human-level error.

  9. Alex2:41

    Okay. You said compare training and validation error. If you plot both against the training set size, what do the learning curves look like for each case?

  10. You2:51

    For high bias both curves flatten out close together at a high error, and adding data doesn't help, they're already converged. For high variance there's a big gap, training error is low, and the validation curve keeps coming down as you add data, so more data helps. In my thesis I actually did this with the boosting model, the gap was still closing at the full dataset, so we argued for getting another six months of data.

  11. Alex3:25

    Did the extra six months help? By how much?

  12. You3:29

    A bit. PR AUC went from about point three eight to point four one on the same test window. Less than the curve suggested, probably because the older data was from before they changed the routing system, so it wasn't quite the same distribution.

  13. Alex3:50

    Different model. Training error is 2%, validation is 11%, and doubling the data moved validation to 9%. What do you do next, in order?

  14. You4:00

    Um, so that's variance, big gap, and data is helping. First I'd check the cheap things: is validation from the same distribution, any leakage, because two percent training error is suspiciously low. Then regularization, stronger L2 or dropout, or for trees, shallower trees and fewer leaves, and early stopping. And if getting more data is cheap, more data, since the curve is still going down. I wouldn't make the model bigger.

  15. Alex4:34

    Where does ensembling fit in this picture?

  16. You4:37

    Bagging averages models trained on different samples, so it mostly cuts variance, that's random forests. Boosting adds models that fix the previous errors, so it mostly cuts bias. So it depends which kind of ensemble.

  17. Alex4:55

    Mm-hm. That's the classical picture. Large neural networks don't always follow it. How does deep learning's double descent complicate this picture?

  18. You5:03

    Hmm, I've heard of it, but I don't know it well. I think test error, kind of, goes up and then comes down again once the model is much bigger than it needs to be to fit the training data? So, um, bigger doesn't always mean more overfitting, I guess. I couldn't explain why it happens.

  19. Alex5:45

    That's okay. One smaller angle. If test error does go up and then down, where would you expect the peak to be?

  20. You5:54

    Um, maybe around the point where the model can, sort of, just barely fit the training data exactly? Where the number of parameters is about the number of examples. That's a guess, though.

  21. Alex6:18

    Okay. Next topic, evaluation. You are building a fraud detector where 0.1% of transactions are fraud. How do you evaluate it?

  22. You6:26

    Um, first, accuracy is useless here, predicting not-fraud every time already gives ninety-nine point nine percent. So I'd use a ranking metric that doesn't depend on the threshold, like ROC AUC, and look at the confusion matrix at a few thresholds.

  23. Alex6:47

    Is ROC AUC a good fit at 0.1%?

  24. You6:50

    Hmm... the ROC curve uses the false positive rate, and with that many negatives the false positive rate stays tiny even when there are thousands of false alarms. So the curve looks great and the model can still be useless for the analysts. So, actually, precision and recall are better here: PR AUC, and precision at the recall the business needs. Which is what I use in my thesis too, at six percent positives, I should have said that first.

  25. Alex7:33

    Okay. The model outputs a score, and someone has to decide where to cut. How would you pick the operating threshold?

  26. You7:41

    With the business costs. A missed fraud costs roughly the transaction amount, a false alarm costs a manual review, say five dollars of analyst time, plus some customer annoyance if the card gets blocked. I'd pick the threshold that minimizes expected cost on a validation set. Or, if the review team has fixed capacity, like two hundred alerts a day, the threshold is just whatever gives the top two hundred, and I'd report precision at that cutoff. And the scores should be calibrated if anyone reads them as probabilities.

  27. Alex8:20

    Okay. Before any metric, how do you split the data for this evaluation?

  28. You8:25

    By time. Train on older months, validate and test on later months. A random split would let the model see future fraud patterns, and the same card or the same fraud ring could be on both sides. Maybe also group by card so one card isn't in both.

  29. Alex8:49

    Your model flags a thousand transactions a day. Fifty of them are fraud, and there are eighty frauds a day in total. What are precision and recall?

  30. You8:59

    Precision is fraud among the flagged, so fifty out of a thousand, five percent. Recall is the frauds we caught out of all frauds, fifty out of eighty, um, sixty-two and a half percent. So we catch most of it, but ninety-five percent of the reviews are wasted. Whether that's fine depends on what a review costs compared to the average fraud.

  31. Alex9:36

    How would you deal with the imbalance when training?

  32. You9:40

    Class weights first, it's the simplest. Or undersample the negatives. But only in the training set, never in validation or test, otherwise the precision numbers are made up. And if I resample, the predicted probabilities are off, so I'd recalibrate them afterwards, like with isotonic or Platt scaling on a validation set with the real ratio.

  33. Alex10:07

    How would you check the calibration?

  34. You10:10

    A reliability plot, bin the predictions and compare the average prediction with the actual fraud rate in each bin. With point one percent positives most bins are almost empty of fraud, so I'd use bins by quantile, not fixed widths. I've only done that on my thesis data, not on something this rare.

  35. Alex10:38

    A colleague reports a ROC AUC of 0.97 for this fraud model and wants to ship it. What do you ask them before anything else?

  36. You10:48

    What's the precision at the threshold we'd actually use, and at what review volume. And how they split the data, by time or randomly. A point nine seven with a random split on fraud I'd be suspicious of, it could be the same cards on both sides.

  37. Alex11:10

    Fraudsters adapt, so a pattern that worked last quarter stops working. Fraud patterns change. How does that affect evaluation?

  38. You11:18

    Um, so the test window has to be after the training window, that's the time split. And labels come late, chargebacks can take like sixty days, so the most recent weeks look cleaner than they are. I'd evaluate on a window that's old enough for labels to settle. And I'd retrain regularly and watch precision at the cutoff over time. I'm less sure how you'd, kind of, detect a new pattern before the labels arrive.

  39. Alex11:59

    Okay. Moving on. This one sounds basic, so I'll push on it a bit. What is overfitting and what are the main ways to prevent it?

  40. You12:09

    It's when the model learns the noise or the quirks of the training set, so it's great there and worse on new data. To prevent it: more data, or data augmentation for images and text. Regularization, L1, L2, dropout, weight decay. Early stopping on a validation set. A simpler model, fewer features, shallower trees. And cross-validation to estimate it honestly.

  41. Alex12:36

    You listed dropout. What does it do during training, and what changes at inference?

  42. You12:41

    During training it zeroes each unit with some probability, so the network can't rely on any single unit, a bit like training many thinned networks. At inference nothing is dropped, and the scale is corrected, in the usual implementation the activations are scaled up during training so inference needs no change.

  43. Alex13:07

    Okay. You ship a model. Your validation score is great and production is terrible. What do you check first?

  44. You13:14

    Hmm. I'd check whether the production data looks different from the training data, like the distributions of the features. And whether the features are computed the same way in production. Oh, and, actually, first I'd check for leakage. If validation is suspiciously great, maybe a feature has information from the future. In my thesis we had a feature, minutes since the driver's last status update, and it turned out the last status update could be the delivered event itself. So validation PR AUC was like point seven and it was fake.

  45. Alex14:01

    A leak like that is easy to miss. How did you find it?

  46. You14:06

    Feature importance. That one feature was way above everything else, and it made no sense that it would be that predictive. I checked the timestamps of a few rows by hand. After I removed it the score dropped to around point three eight, which was the real number.

  47. Alex14:29

    And beyond leakage, the features themselves can be computed differently in production. How would you set things up so this is caught before launch?

  48. You14:38

    Um, compute the features from one shared code path for training and serving, if possible. Log the production inputs and compare their distributions with training. And maybe run in shadow mode for a while before it acts on anything. I haven't done the shadow part myself.

  49. Alex15:04

    You mentioned cross-validation. Your thesis data is deliveries over eighteen months. Anything to watch for with cross-validation on data like that?

  50. You15:12

    Yes, a normal k-fold shuffles time, so the model trains on the future and tests on the past. I used expanding windows, train on the first months, test on the next one, then move forward. Also the same driver appears many times, so I think there's some leakage through the driver even with time splits. I didn't fully solve that one.

  51. Alex15:45

    How do you pick the regularization strength?

  52. You15:47

    Search over it on the validation folds, usually on a log scale, like ten to the minus four up to ten. Pick the best mean score, or the simplest model within one standard error of the best.

  53. Alex16:06

    You listed data augmentation earlier. When can augmentation hurt instead of help?

  54. You16:11

    Um, when the augmentation changes the label. Like flipping a digit image, a six becomes a nine. Or cropping out the object you're classifying. And if the augmented data doesn't look like the real data, the model learns the augmentation artifacts. For tabular data I've never really used it, I'm not sure it, sort of, makes sense there beyond things like SMOTE.

  55. Alex16:51

    Okay. Regularization in more detail. Compare L1 and L2 regularization. Why does L1 produce sparse solutions?

  56. You16:57

    L1 adds the sum of absolute values of the weights to the loss, L2 adds the sum of squares. L2 shrinks all the weights smoothly toward zero but they almost never hit exactly zero. L1 sets many of them exactly to zero, so it does feature selection. Why... um, it's because of the, the gradient of the absolute value is constant?

  57. Alex17:31

    Think about the shape of the constraint region.

  58. You17:34

    Right, okay. If you write it as a constrained problem, L2 is a circle, or a ball, and L1 is a diamond. The loss contours are ellipses, and you expand them until they touch the region. With a diamond, the first touch is very likely at a corner, and corners are on the axes, so some weights are exactly zero. With the circle there are no corners, so it touches anywhere. And my gradient point is the same idea from the other side: L1 keeps pushing with the same force even when the weight is small, L2's push goes to zero.

  59. Alex18:25

    Okay. Practical case: two features that are almost copies of each other, highly correlated. What happens under each?

  60. You18:32

    L1 tends to pick one of them, kind of arbitrarily, and zero the other. L2 splits the weight between them. Elastic net is the mix, which keeps groups of correlated features together.

  61. Alex18:49

    Is there a probabilistic way to see the difference?

  62. You18:52

    Yes, as MAP estimation. L2 is a Gaussian prior on the weights, L1 is a Laplace prior. The Laplace prior has a sharp peak at zero, so it puts a lot of belief on exactly zero, which matches the sparsity. The Gaussian is smooth at zero.

  63. Alex19:16

    When would you not want a sparse model?

  64. You19:19

    When many features each carry a little signal, like text with lots of words, or when features are correlated groups and dropping some makes the model unstable between retrains. Sparse is nice for interpretability and cheap serving, but it can cost accuracy.

  65. Alex19:41

    Okay. Same idea in deep learning, where most people train with Adam. What does weight decay do in neural networks and how does it differ from L2 in Adam?

  66. You19:52

    Um. Weight decay shrinks the weights by a small factor each step. With plain SGD that's, kind of, the same as L2 regularization. With Adam it's different, I know AdamW exists because of this. I think with L2 inside Adam, the penalty gradient gets, sort of, divided by the adaptive scaling, so weights with large gradients get regularized less? And AdamW applies the decay directly to the weights, outside the adaptive part. I'm not fully sure I have the direction right.

  67. Alex20:54

    Next, classical models, since you work with tabular data. Compare random forests and gradient boosting. When would you pick each?

  68. You21:02

    Both are tree ensembles. A random forest trains many deep trees independently, each on a bootstrap sample with a random subset of features at each split, and averages them. That mostly reduces variance, because the trees are decorrelated. Gradient boosting trains shallow trees one after the other, each one fitting the residual errors, or the gradient of the loss, of the ensemble so far. That mostly reduces bias. I'd pick boosting when I want the best accuracy on tabular data and have time to tune it, learning rate, depth, number of trees with early stopping. Random forest when I want something robust with almost no tuning, or the labels are noisy, since boosting can chase noise.

  69. Alex21:50

    Mm-hm. Which did you use in your thesis, and why that one over the other?

  70. You21:56

    LightGBM. I started with a random forest as a baseline, PR AUC about point three three, and boosting got to point three eight after tuning. Also it handles the categorical features and missing values natively, which mattered because a lot of the driver features are missing for new drivers.

  71. Alex22:19

    You mentioned missing values. Your thesis uses LightGBM, but the idea is similar. How does XGBoost handle missing values and regularization?

  72. You22:27

    For missing values, at each split it learns a default direction, it tries sending the missing rows left and right and keeps whichever reduces the loss more. For regularization, there's an L2 penalty on the leaf weights, lambda, and I think also L1, alpha. And gamma, which is a minimum loss reduction to make a split. Plus the usual things like shrinkage and subsampling, I guess. I'm not sure I could write the exact objective.

  73. Alex23:14

    Your boosting model's validation loss starts rising after about three hundred trees at a learning rate of 0.1. What do you change?

  74. You23:22

    That's overfitting as trees are added. Early stopping would just stop at three hundred. If I have time, lower the learning rate, like point oh three, and let it use more trees, that usually ends a bit better. And look at the depth, or min child weight, and row and column subsampling.

  75. Alex23:47

    Feature importances from a random forest. How far do you trust them?

  76. You23:52

    Not very far. The default impurity importance is biased toward features with many split points, continuous or high-cardinality ones, and with correlated features it splits the credit randomly. Permutation importance on a validation set is better, or SHAP values. That's how I found the leaky feature, actually, but even then it only tells you what the model uses, not what causes lateness.

  77. Alex24:22

    Okay. A quick one. In your pipeline you probably scaled features for some models and not others. Why do tree models not need feature scaling?

  78. You24:32

    Because a split only looks at the order of values: is x less than some threshold. Any monotonic transformation, scaling, log, keeps the order, so the same splits exist. Distance and gradient based models care about scale, trees don't.

  79. Alex24:51

    Last topic, deep learning. Explain how a transformer works and why it replaced RNNs for most sequence tasks.

  80. You24:59

    Okay, so, um, before transformers, the standard was RNNs and LSTMs, and, uh, they had attention added on top for translation, the Bahdanau paper, and then, you know, people realized you could drop the recurrence entirely, and, there were also convolutional approaches like ByteNet, and

  81. Alex25:17

    Let me stop you there. I'm less interested in the history. How does the transformer itself work, one layer, step by step?

  82. You25:25

    Sorry, yes. Each token is embedded and gets positional information added, since attention itself has no order. Then each layer has self-attention: every token makes a query, a key and a value, the attention weights are a softmax of the query dot the keys, and the output is the weighted sum of values. Multi-head means you do that several times in parallel with smaller dimensions. After attention there's a feed-forward network applied to each position, and residual connections and layer norm around both. Decoder-only models like GPT add a causal mask so a token only sees the past.

  83. Alex26:08

    Okay. And why did it replace RNNs for most sequence tasks? The main reasons.

  84. You26:14

    Two main reasons. Training parallelizes over the sequence, an RNN has to go step by step. And any token can attend directly to any other, so long-range dependencies are one step away instead of being squeezed through a hidden state over hundreds of steps. The cost is that attention is quadratic in sequence length, in compute and memory.

  85. Alex26:41

    What does multi-head attention buy you over one big head with the same total dimension?

  86. You26:46

    Um, each head can, kind of, attend to different things, like one follows syntax and one follows nearby tokens, and one softmax can only produce one distribution over positions. With one big head you'd get one weighted average. The compute is about the same. I'm not sure how much the heads really specialize in practice, I've seen papers saying you can prune a lot of them.

  87. Alex27:30

    And positional information, what are the options?

  88. You27:32

    The original paper used fixed sinusoids added to the embeddings. Then learned position embeddings, like BERT. And newer models use relative positions, rotary embeddings, RoPE, that rotate the queries and keys, so the dot product depends on the distance. I couldn't derive RoPE, but that's the idea.

  89. Alex27:58

    Your ingredient-tagging side project. Encoder-only or decoder-only model, and why?

  90. You28:02

    Hmm. Tagging spans is a classic encoder task, like BERT with a token classification head, it sees both sides of each word and it's small and fast. I actually used a small decoder model with instructions, because that's what the tutorial did and it outputs a list. If I did it again I'd try the encoder first, it's probably cheaper and easier to evaluate per token.

  91. Alex28:40

    One detail in the attention formula. Why do we scale dot products by the square root of the dimension?

  92. You28:47

    If the query and key components have variance around one, the dot product of d of them has variance around d. So for big d the scores are large, the softmax becomes almost one-hot, and the gradients get tiny. Dividing by the square root of d brings the variance back to about one.

  93. Alex29:13

    Now inference. When a decoder model generates text, servers keep something called a KV cache. What is a KV cache and why does inference need it?

  94. You29:23

    When you generate token by token, each new token needs attention over all the previous tokens. The keys and values of the previous tokens don't change, because of the causal mask, so you store them instead of recomputing the whole prefix every step. It turns each step from reprocessing the prefix into just the new token. The cost is memory, it grows with sequence length, layers and heads, which is, um, I think why people use grouped query attention, fewer key value heads. I've read about that more than I've used it.

  95. Alex30:08

    Roughly how big is the KV cache for one sequence?

  96. You30:12

    Um, let me think. For each layer and each token you store a key and a value, each of size number of heads times head dimension, so two times layers times the model dimension, times the sequence length, times bytes per number. For, say, thirty-two layers, model dimension four thousand, four thousand tokens in fp16, that's two times thirty-two times four thousand times four thousand times two bytes, um, about two gigabytes? That seems like a lot, but I think it's the right order.

  97. Alex31:12

    Before we finish, one thing from the start. You mentioned fine-tuning a small model to tag ingredients. How do you know it works?

  98. You31:21

    Honestly, not very rigorously yet. I hand-labelled about two hundred recipes as a test set, and it gets the ingredient spans right maybe eighty-five percent of the time, but I wrote the labels myself and I've looked at those examples a lot while prompting, so it's probably optimistic. I should have a test set I don't look at.

  99. Alex31:57

    We have a few minutes left. Any questions for me?

  100. You32:01

    Yes. How much of the ML work on a team like this is modeling versus building data pipelines and monitoring?

  101. Alex32:12

    It varies by team. On many teams the data, evaluation and monitoring work takes more time than the modeling itself, especially once a model is in production and has to be retrained and watched. Some research-leaning teams are the other way around. The hiring team can tell you how it splits for a specific role. Anything else?

  102. You32:33

    Sorry, can I add one thing to the double descent question? I remembered something.

  103. Alex32:41

    Go ahead, briefly.

  104. You32:43

    I think the explanation is that past the interpolation point there are many models that fit the data exactly, and gradient descent tends to find a smooth one, a kind of implicit regularization. But I'm not confident, that's from a blog post.

  105. Alex33:07

    Okay. That's time. Thanks. Your report will be ready in a few minutes.

Mockich is a practice tool. Scores and delivery signals are guidance for your preparation, not a prediction of a real hiring decision.

Start another interview
Sample report · Mockich