This guide covers what a Data Scientist at The Trade Desk is expected to do and how to prepare for the interview.
Initial Screening
reportedWhoever runs this call is usually not a practitioner. They take notes, and a hiring manager skims those notes later, so the real question is whether your work survives being written down by someone outside the field. Test every project sentence against that: could a non-specialist repeat it correctly without knowing what a propensity score is? Carry a plain-language version of each project and one reason you want this particular role that you could not copy onto another application. Vagueness at this stage reads as inexperience, even when the underlying work was genuinely deep.
What to demonstrate
- Whether a non-specialist can restate your projects accurately, since their paraphrase is what reaches the hiring manager
- Whether your reason for wanting the role points at the work itself rather than the company's reputation
- Whether your language signals the level being screened for: what you decided yourself versus what you were handed
How to prepare
- Write a two-sentence, jargon-free version of each major project: the question nobody could answer, and the decision your work changed. Read it to someone outside data and have them repeat it back
- Point your 'why this role' answer at something concrete in the job description or the product surface you would be working on, and keep it to two sentences
- Have two questions ready about measurement: which metric the team is held to, and who acts on an analysis once it lands
Technical Assessments
reportedBefore anything else, this round is a reading test. You are given a small schema and a question phrased in business language, and most of the difficulty sits in the gap between them. Who counts as an active user, does a refunded order still count as an order, is that date column an event time or a load time. Weak answers start typing immediately and compute something precise about the wrong population. Strong ones pin the definition in one sentence, name the column that encodes it, then write the query. On a timed assessment with nobody to tell, write the definition in a comment anyway.
What to demonstrate
- Whether an ambiguous term becomes a specific column and filter before any computation happens
- Whether you read the schema for keys and cardinality rather than only for column names
- Whether the result answers the question at the grain it was asked at, per user or per session or per day
How to prepare
- Take three metrics you already use and write down the exact filter and exact grain behind each, then practise stating one of them in a single sentence out loud
- On a schema you have never seen, spend the first minute writing what one row of each table means and which key it is unique on, then predict which joins can duplicate rows
- Rehearse a version where the definition changes halfway through, and edit the query you have instead of starting over
Behavioral Interviews
reportedThis round decides whether you owned a decision or watched one happen nearby. Interviewers for data roles listen for the point where the analysis stopped being a report and started changing what someone did, so build each story around that hinge: what was going to happen by default, what you found, and what happened instead. The most common weakness is a story that ends at delivery. If you can name the decision your work changed and the number that moved because of it, most follow-ups become easy.
What to demonstrate
- Whether the decision was yours to influence, or whether you are narrating a team outcome in the first person
- The counterfactual: what would have been done without your analysis, and why that default was worse
- How far your involvement ran past the handoff, and whether you checked that the change did what you predicted
How to prepare
- Pick three projects and write one sentence for each naming the decision-maker, the choice in front of them, and what they chose after seeing your work. If you cannot name a person and a choice, the story is not ready for this round.
- Reconstruct the baseline for your strongest project from the original query or dashboard rather than memory, so the before-number survives a follow-up asking where it came from.
- Prepare an honest version of a project where your recommendation was overruled, including what you did with the analysis afterwards.
Case Studies
reportedThis round runs as a working session, so part of what it decides is whether you are useful to think with. The interviewer will interrupt: a hint that the data you assumed does not exist, a challenge to your metric, a nudge toward a branch you skipped. Treating those as interference is the common failure. Reason out loud while your thinking is still provisional so there is something to react to, and when a redirect arrives, take it instead of defending the path you had already started down.
What to demonstrate
- Whether your reasoning is audible while it is still unsettled, or only after you have privately decided
- What you do with a hint: absorb it and adjust, or argue for the original route
- Whether your clarifying questions have answers that would change your approach, as opposed to filling silence
- Whether you can be wrong about something in the middle of the case and keep moving without restarting
How to prepare
- Run practice cases with a partner instructed to interrupt twice: once to remove a data source you assumed existed, once to reject the metric you chose. Practise absorbing both without going back to the start.
- Before each practice case, write down the clarifying questions you plan to ask, then check afterwards whether any answer actually changed what you did. Drop the ones that did not.
- Explain an analysis you already know well to someone outside the field and have them stop you at every point where the reasoning jumped a step.
Final Evaluation
reportedA day of back-to-back interviews samples your floor, not your ceiling. Four hours in, the habits that carry a good answer are the first to go: restating the question before solving it, asking what the data would have to look like, checking a number before quoting it. What the day decides is whether the tired version of you is still someone to leave alone with an ambiguous problem. The round that sinks a candidate is usually not the hardest one. It is the one immediately after the round that went badly.
What to demonstrate
- Whether the late rounds get the same clarifying questions as the first one, or whether you start answering immediately to save effort
- Whether a weak answer stays in the room it happened in, instead of following you into the next conversation as apology or distraction
- Whether the quality of your questions holds up, since fatigue removes curiosity about the problem before it removes knowledge of the method
How to prepare
- Rehearse the length, not just the content: book four mock interviews of different types in one afternoon with short gaps, because the one you need to observe is the fourth
- Put the two or three questions you ask at the start of any problem on a card in front of you, so that under fatigue it is a habit you run rather than a decision you make
- Decide in advance what the gap between rooms is for: water, one line of notes on anything you promised to follow up, and an explicit close on the round that just ended so it does not travel
- Prepare a different closing question for each interviewer, so the end of a long day does not produce the same one four times
2 candidate reports. Individual accounts describe a particular role and hiring cycle.
The Trade Desk Software Engineer Interview Experience — A Take-Home Stock-Price API Task
I am not sure whether this take-home assessment is the same as an online assessment. Implement a single function that returns a list containing every date between first_date and last_date, together with the stock's opening and closing prices for each date. The rough interface was: The output looked roughly like this: All of this information had to be obtained through real HTTP requests. The promp…
Read full experienceThe Trade Desk Senior Software Engineer Interview Experience — Two Read-Heavy Design Rounds and a Bowling-Score Coding Question
View report detailsPracHub editorial advice for the preparation topics above.
Treating a bid as if it does not affect the price paid, under a first-price auction.
In a second-price auction the winner pays the runner-up's bid, so bidding true value is close to optimal and bid and price are usefully separable. Under first-price clearing, which is now the common case in open exchanges, the winner pays exactly what it bid, so raising the bid raises both the win probability and the cost of every win that would have been won anyway. A bid-increase experiment can therefore show more impressions, more conversions and worse profit simultaneously, and reading only the volume metrics will call it a success. The related second-order problem is that your own bid increase raises the clearing prices your control cells face, which contaminates the comparison unless the cells are separated by market.
Reallocating budget using last-click attribution.
Last-click assigns full credit to whichever touchpoint sits closest to the conversion in time, which structurally favours channels that harvest existing demand — retargeting an already-interested user, or catching a branded search — over channels that create demand in the first place. Optimising against it therefore moves money toward tactics that would have converted many of those users anyway, and the reported cost per action improves at the exact moment true incremental performance gets worse. The signature of this failure is a portfolio where every channel's attributed conversions sum to well above the advertiser's total conversion count. The counter is to treat attributed numbers as a budget-splitting convention and to source the actual reallocation decision from holdout-based incrementality.
Over-explaining the method and under-explaining the implication
Lead with the answer and what you would do about it, then give the approach when asked. Roughly one sentence of method per three of implication is the right ratio for a stakeholder-facing answer; the interviewer already knows what a regression is.
Ending an analysis without a recommendation or next step
Close with what you would do and what would change your mind, stated as a condition you can check later. If the evidence is genuinely inconclusive, recommend the specific next measurement and say what it costs in time or exposure.
Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.
Calculate the required sample size for a test detecting a 2% lift in c…
Calculate the required sample size for a test detecting a 2% lift in click-through rate given a baseline conversion variance.
Approach
- Write down the assumption the method needs before you use the method.
- Say what the estimate is of, and over what population it generalises.
- Sanity-check the answer against a simple bound or a simulated case.
Follow-up
- How would you explain this result to someone who does not know statistics?
- Which assumption here is most likely to be violated in practice?
Walk through the end-to-end development of a Click-Through Rate (CTR) …
Walk through the end-to-end development of a Click-Through Rate (CTR) or Conversion Rate (CVR) prediction model using tree-based methods.
Approach
- Pick an evaluation metric that matches the cost of each error type, not a default.
- Frame the prediction: the label, the moment of prediction, and the action it triggers.
- Set a baseline first, so any model has something honest to beat.
Follow-up
- Where could label leakage enter this setup?
- How would you choose the decision threshold, and who owns that choice?
Implement click-through rate and eCPM from written definitions
Two frames. impressions: impression_id, served_ts, line_item_id, creative_id, billed_price_micros_usd, is_billable, viewability_status, ivt_status. clicks: click_id, impression_id (nullable), click_ts, line_item_id, ivt_status, is_billable. Implement exactly these definitions: click-through rate is valid clicks whose parent impression is billable and valid, over billable valid impressions, with both sides bucketed on the parent impression's served_ts UTC date; eCPM is SUM(billed_price_micros_usd)/1e6 over billable impressions divided by their count over 1000, same bucketing. Return one row per (line_item_id, served_date) with impressions, clicks, ctr and ecpm_usd, plus a count of every row you dropped and why.
Approach
- Filter impressions to is_billable and ivt_status == 'valid' once, and treat that frame as the single source of the denominator for both metrics. Deriving everything from one filtered population is what guarantees the two metrics describe the same impressions.
- Join clicks into that filtered frame on impression_id from the click side, keeping only matched rows, because the definition conditions the numerator on the parent impression being billable and valid. Count unmatched clicks separately and split them into null impression_id (orphan beacons) and non-null but filtered-out parents, since a rising orphan share is a measurement fault rather than a CTR movement.
- Take served_ts from the impression side after the join and never click_ts. Bucketing on click_ts puts a click in a different day bucket from its own impression, which distorts both days for any cohort near midnight.
- Decide the click fan-out rule explicitly: one impression can carry more than one click row, so either deduplicate to one click per impression or state that you are counting click events. Without that decision CTR is not bounded by 1.
- Aggregate the filtered impressions by (line_item_id, served_date) for count and summed micros, aggregate matched clicks on the same key, then outer-join and fill missing click counts with zero so zero-click line-item days survive instead of disappearing from the output.
Worked solution 25 min
- Build imp_f = impressions[is_billable & (ivt_status == 'valid')] and record len(impressions) - len(imp_f) as the filtered count.
- Build clk_f = clicks[(ivt_status == 'valid')], then merge clk_f onto imp_f[['impression_id','served_ts','line_item_id']] with how='inner', keeping the impression-side served_ts. Record orphan and unmatched counts.
- Deduplicate clicks to one per impression_id (or record that you did not), then groupby(['line_item_id','served_date']).size() on both frames.
- Aggregate imp_f for impressions and billed micros on the same key, outer-join the click counts, fillna(0), and compute ctr = clicks/impressions and ecpm_usd = (micros/1e6)/(impressions/1000).
Follow-up
- One impression has two click rows. Does your CTR exceed 1.0, and which definition would you put on an advertiser-facing report?
- How does the answer change if the denominator becomes measured-viewable impressions rather than all valid billable impressions?
- A filter change removed the cheapest 10% of inventory and eCPM rose 12%. How do you present that so nobody reads it as a price increase?
Clean and aggregate noisy real-time event logs to surface anomalies in…
Clean and aggregate noisy real-time event logs to surface anomalies in bid response latencies.
Approach
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- State the window function and its partition and ordering out loud before writing it.
- Compute rates by summing numerator and denominator separately, never by averaging rates.
Follow-up
- How does the query change if the join becomes one-to-many?
- How would you verify this result without re-running the same query?
Write a SQL query using SQL window functions to calculate rolling 7-da…
Write a SQL query using SQL window functions to calculate rolling 7-day conversion rates for active advertising campaigns.
Approach
- Say which table is the grain you start from, and join outward from it.
- Handle the rows that do not match: a LEFT JOIN with a NULL check is usually the question.
- Compute rates by summing numerator and denominator separately, never by averaging rates.
Follow-up
- What breaks if events arrive late or out of order?
- How would you verify this result without re-running the same query?
Deduplicate conversions across sources and quantify the inflation rate
conversion_event holds one row per report received, before deduplication: conversion_id, advertiser_id, conversion_ts, received_ts, conversion_type, conversion_value_usd, dedup_key TEXT (nullable, advertiser-supplied) and source (browser_pixel, mobile_sdk, server_api, offline_upload). The same real purchase routinely arrives from two sources. For one advertiser and one month, keep exactly one row per (advertiser_id, dedup_key), preferring server_api, then mobile_sdk, then browser_pixel, then offline_upload, breaking remaining ties on earliest conversion_ts. Return the raw count, the deduplicated count and the inflation rate, and state what you do with rows whose dedup_key is null.
Approach
- Rank with ROW_NUMBER() OVER (PARTITION BY advertiser_id, dedup_key ORDER BY CASE source WHEN 'server_api' THEN 1 WHEN 'mobile_sdk' THEN 2 WHEN 'browser_pixel' THEN 3 ELSE 4 END, conversion_ts, conversion_id) and keep rn = 1. The CASE encodes the stated preference; conversion_id as the last sort key makes the result deterministic when two reports tie on everything else, which matters because a non-deterministic dedup produces a different count on every run.
- Handle dedup_key IS NULL before the window runs. SQL window partitioning treats all nulls as a single group, so every unkeyed conversion but one would be discarded. Split them out, pass them through untouched, and report their share alongside the headline number.
- Compute the raw and deduplicated counts over an identical filter set in the same query, so the inflation rate is not comparing two differently-scoped populations. Inflation is raw / deduped - 1.
- Break the duplicate population down by how many distinct sources share each dedup_key. A key appearing under two sources is the expected pixel-plus-server pattern; a key under three or with reports days apart is an advertiser implementation problem, not a duplicate.
- Cross-check value per key, not in aggregate. The preference order sorts on source, not on whether conversion_value_usd is populated, so a server_api row that reports the order identifier with a null or zero value outranks a browser_pixel row carrying the basket total. Keep the surviving value beside the maximum value seen among that key's dropped rows so the substitution is visible, and if it happens, fix it with an explicit value rule (for example, coalesce to the highest non-null sibling value) rather than by reordering the source preference, which would change which row's other attributes you publish.
Worked solution 25 min
- Scope the scan to one advertiser_id and conversion_ts inside the month, and record the raw row count.
- Split into a keyed set (dedup_key IS NOT NULL) and an unkeyed set, counting each, since the unkeyed share is the number you will be challenged on.
- On the keyed set apply the ROW_NUMBER with the source CASE, conversion_ts and conversion_id in the ORDER BY, and keep rn = 1.
- UNION ALL the unkeyed rows back in unchanged so the output is the full deduplicated population rather than only the keyed part.
- Emit raw, deduped, raw::numeric / deduped - 1, and a side table of COUNT(*) per dedup_key so any key with three or more reports is visible.
- From the same ranked set, emit kept_value = conversion_value_usd at rn = 1 and dropped_max_value = MAX(conversion_value_usd) FILTER (WHERE rn > 1) per key, and count the keys where the first is null or 0 while the second is above 0.
Follow-up
- The advertiser's own order table shows 10% fewer conversions than your deduplicated count. Where do you look first?
- What changes if the advertiser populates dedup_key on the browser pixel but leaves it null on the server API?
- received_ts lags conversion_ts by hours to days. What breaks if the dedup job runs hourly over a fixed window rather than on arrival?
Propose metrics to measure the health and efficiency of a distributed …
Propose metrics to measure the health and efficiency of a distributed ad auction marketplace.
Approach
- Restate the decision this analysis has to support, and who acts on the answer.
- Decompose the metric into the rates that drive it, and say which one you would check first.
- Fix the population and the time window before naming any metric.
Follow-up
- Which segment would you cut first, and what would that rule out?
- How would you detect that the metric is being gamed rather than genuinely improving?
How would you evaluate the trade-offs between exploration and exploita…
How would you evaluate the trade-offs between exploration and exploitation in a multi-armed bandit bidding strategy?
Approach
- Name one primary metric, then the guardrail that stops it being gamed.
- Decompose the metric into the rates that drive it, and say which one you would check first.
- Restate the decision this analysis has to support, and who acts on the answer.
Follow-up
- Which segment would you cut first, and what would that rule out?
- What would you do if the primary metric and the guardrail moved in opposite directions?
Define a robust set of KPIs for a new creative optimization product fe…
Define a robust set of KPIs for a new creative optimization product feature.
Approach
- Restate the decision this analysis has to support, and who acts on the answer.
- Fix the population and the time window before naming any metric.
- Name one primary metric, then the guardrail that stops it being gamed.
Follow-up
- Which segment would you cut first, and what would that rule out?
- What would you do if the primary metric and the guardrail moved in opposite directions?
Diagnose a sudden 15% drop in conversion volume week-over-week; walk t…
Diagnose a sudden 15% drop in conversion volume week-over-week; walk through your metric drop diagnosis framework.
Approach
- Name one primary metric, then the guardrail that stops it being gamed.
- Restate the decision this analysis has to support, and who acts on the answer.
- Fix the population and the time window before naming any metric.
Follow-up
- What would you do if the primary metric and the guardrail moved in opposite directions?
- Which segment would you cut first, and what would that rule out?
Explain how you would run an experiment when traditional user-level ra…
Explain how you would run an experiment when traditional user-level randomization is impossible due to privacy constraints or auction dynamics.
Approach
- Say whether units interfere with each other, and switch design if they do.
- Name the randomisation unit first; it decides the variance and what the test can detect.
- State the primary metric and the minimum effect worth shipping, then size the test.
Follow-up
- What would you do if you could not randomise at all?
- What would you conclude if the result is positive but the test is underpowered?
Design an A/B testing framework for evaluating a new bid-shading algor…
Design an A/B testing framework for evaluating a new bid-shading algorithm, and discuss potential experimentation pitfalls such as network interference or sample ratio mismatch.
Approach
- Decide the analysis before seeing data, including how long it runs and when you look.
- Name the randomisation unit first; it decides the variance and what the test can detect.
- State the primary metric and the minimum effect worth shipping, then size the test.
Follow-up
- What would you conclude if the result is positive but the test is underpowered?
- How would you handle interference between treated and control units?
Set a stopping rule for a test that is read daily
A 21-day line-item test was sized for a fixed horizon. An analyst refreshes a dashboard every morning showing one primary metric, conversions per device, and six guardrails. On day 4 the primary shows p = 0.03 and the analyst wants to stop and ship. Give the type I error actually incurred by this monitoring pattern, propose a defensible stopping rule, and state how you would treat the six guardrails differently from the primary.
Approach
- Quantify the inflation rather than gesturing at it. Repeated fixed-horizon tests at a nominal 0.05 give roughly 14% type I error at 5 equally spaced looks and about 25% at 20. The naive 1 - 0.95^20 = 64% is wrong, because successive looks are strongly correlated partial sums of the same data.
- Offer the two valid families. A group-sequential plan with an alpha-spending function fixes the number and timing of looks in advance: O'Brien-Fleming spends almost nothing early (nominal p about 0.000005 at the first of five looks, 0.041 at the last), while Pocock spends a constant nominal 0.0158 at every look. Always-valid inference, such as a mixture sequential probability ratio test or a confidence sequence, permits unlimited looks at a cost of roughly 20-40% more sample at the planned horizon.
- Raise the day-4 problem that is not about alpha at all: the conversion window has not closed. Conversions keep arriving for click_window_days plus ingestion lag, so a day-4 read uses an immature numerator and is not the metric the test was sized on.
- Treat guardrails asymmetrically. One pre-registered primary metric needs no multiplicity correction. Guardrails are harm checks, and Bonferroni-correcting them lowers power to detect harm, which is conservative in the wrong direction; run each at 0.05 one-sided against a pre-set non-inferiority margin.
- If the team instead wants to claim a win on whichever of the seven metrics moves, that is a real multiplicity problem: control the false discovery rate with Benjamini-Hochberg, or use Bonferroni at 0.05/7 = 0.0071, and fix the rule before the test starts.
- Correct the estimate as well as the error rate. Conditional on stopping at the first boundary crossing, the observed effect is biased away from zero, so report a boundary-adjusted or median-unbiased estimate rather than the raw difference.
Worked solution 25 min
- Establish the repeated-testing error by table or simulation: at 20 equally spaced looks against a nominal two-sided 0.05 boundary, the probability of at least one crossing under the null is about 0.25.
- Choose the design: pre-register four interim looks plus a final one under an O'Brien-Fleming spending function, giving z-boundaries of roughly 4.56, 3.23, 2.63, 2.28 and 2.04.
- Set the first readable look only after click_window_days plus the observed ingestion lag has elapsed from the start of the flight, rather than after an arbitrary number of days.
- Write the guardrail rule separately: six one-sided tests at 0.05 against pre-set margins, no multiplicity correction, with any crossing escalating to a human decision rather than triggering an automatic stop.
- If the test does stop at an interim look, report the boundary-adjusted estimate alongside the raw difference and state the gap.
Follow-up
- Leadership wants a daily read regardless. Which of the two valid families do you pick, and what does it cost?
- One guardrail crosses at p = 0.04 on day 12. Do you stop?
- How does the conversion maturation curve change the earliest day the primary metric is even readable?
Click-through rate fell while click volume stayed flat
Platform click-through rate fell from 0.42% to 0.34% day over day, while the raw count of ad_click rows was unchanged. CTR here is valid billable clicks over valid billable impressions, both bucketed on the parent impression's served_ts. You have ad_impression (impression_id, auction_id, served_ts, is_billable, ivt_status, publisher_id, placement_id, creative_id, os_family), ad_click (click_id, impression_id, click_ts, ivt_status, is_billable) and bid_request_log (auction_id, exchange_id, ad_format, device_type). Deliver a one-paragraph verdict: real engagement decline or denominator artefact, with the evidence that decides it.
Approach
- Plot the numerator and the denominator as absolute counts for 14 days before computing any ratio. A flat numerator against a step in the denominator localises the change in one plot and rules out creative and audience explanations without a single join.
- Split the denominator into its four filter populations by served_ts date — all rows, is_billable only, ivt_status='valid' only, and both. If the billable-and-valid count jumped while total impressions did not, a filter moved, not the traffic.
- If total impressions genuinely grew, join ad_impression to bid_request_log on auction_id and cut the increment by exchange_id, publisher_id and ad_format, looking specifically for publisher_id values whose first served_ts falls inside the window.
- Recompute CTR within each publisher_id present in both periods. Flat within-publisher CTR alongside a falling pooled rate is a mix shift; the pooled number is describing a different population, not different behaviour.
- Check the click side for the mirror error: clicks bucketed on click_ts rather than the parent impression's served_ts shift by roughly one impression-to-click latency, which depresses the most recent day and recovers by itself tomorrow.
Follow-up
- The new publisher is 30% of billable impressions and 4% of clicks. What do you need before recommending it be blocked, and what does blocking it do to eligible RPM?
- How does your answer change if the invalid-traffic job back-filled sivt labels onto impressions served three days ago?
- Would you publish CTR pooled across supply sources at all, and if so with what accompanying number?
Roughly 90 minutes a night on weekdays with one longer weekend block. The plan deliberately cuts scope rather than compressing everything, on the assumption that finishing one thing a night beats half-starting four.
Prepare, practise & reflect
One practical outcome each day. Spend longer where you need it.
0 / 7 done01Fix the scope and set a baseline
- Read the role description and write the three things the loop will almost certainly test, then write an explicit not-doing list for everything else and keep it visible all week.
- Take one 20-minute SQL prompt and one 10-minute metric question cold, and write the single sentence that says what blocked each attempt, since that sentence is what decides which two topics get the most evenings.
- Set the week's one rule: one problem finished to completion every night, including the night you only have 40 minutes.
Deliverable: A one-page scope with an explicit not-doing list and two cold attempts, each carrying one sentence on what blocked it.
Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗02One query pattern, written three times
- Choose the single pattern most likely to appear (a cohort retention grid, or a funnel counted by user) and write it three times from a blank file rather than editing the previous attempt.
- On the third attempt, write the grain of every CTE as a comment before writing its body.
- Stop at 90 minutes even if the third version is imperfect, and write the one thing you would fix with another hour.
Deliverable: Three independent versions of the same query plus a note on what changed between them.
Practice prompt ↗Practice prompt ↗Practice prompt ↗03Only the statistics you will be asked to defend
- Write, in under 200 words, how you would decide whether a difference between two groups is real: the test, its assumptions, and what you would switch to when an assumption fails.
- Compute a 95 percent confidence interval for a difference in proportions by hand on realistic numbers, then write in one sentence what changes if the two samples are paired rather than independent.
- Write your answer to "what does a p-value mean", check it against a definition, and delete the version that describes it as the probability the hypothesis is true.
Deliverable: A 200-word written answer and one hand-computed interval you can reproduce under pressure.
Practice prompt ↗Practice prompt ↗Practice prompt ↗04One case, and the assumptions holding it up
- Answer one product case aloud in 20 minutes with a recording running, then listen back with a pen and mark every claim you asserted without saying what it rested on: an assumed user behaviour, an assumed data source, an assumed baseline rate, an assumed grain.
- Pick the three assumptions the recommendation actually depends on, write how you would check each one against data, and say which one being wrong would flip the recommendation rather than merely weaken it.
- Write the four-step structure you used onto a card small enough to hold in working memory when you are nervous.
Deliverable: One recording, three load-bearing assumptions each with a written check, and a four-step structure card.
Practice prompt ↗Practice prompt ↗Worked solution ↗05Your own work, timed
- Write a 90-second version and a four-minute version of your main project, and time both out loud rather than reading them.
- Prepare answers to the two follow-ups that always come: what you would do differently, and how you knew it worked.
- Put one number in the first sentence and be able to say exactly where that number came from and what it excludes.
Deliverable: Two timed narratives with one defensible number in the opening line.
Practice prompt ↗Practice prompt ↗06The one full rehearsal, in a longer weekend block
- Run a 60-minute mock covering query work, a case and a behavioural question in a single sitting with no breaks, because sustained attention is the thing evenings have not trained.
- Immediately afterwards, and before hearing any feedback, write the three moments you lost the thread.
- Spend the rest of the block only on those three moments, and on nothing you merely feel shaky about.
Deliverable: Mock notes naming three failure moments with a specific fix written under each.
Practice prompt ↗Practice prompt ↗07Taper
- Write the 20-minute warm-up you will actually do on the morning of the interview: one query you can already write from a blank file, one metric you can define out loud, and nothing you have never seen before.
- Re-read only your own notes from this week, and open no new material.
- Write down the logistics: the tool you will be asked to work in, whether lookups are allowed, and the sentence you will use when you do not know something.
Deliverable: A one-page card holding the case structure, the project numbers, and the logistics.
Practice prompt ↗Practice prompt ↗Worked solution ↗Expand any day for tasks and deliverables. Your progress is saved on this device.
Most of the questions in this section reduce to one thing: can you be handed a vague request and come back with something useful? Prepare an example where the ask was underspecified, you chose an interpretation, and you said out loud which interpretation you chose. Describing how you narrowed the question matters more than the technique you eventually used.
Describe a time you had to explain a complex machine learning model or…
Describe a time you had to explain a complex machine learning model or statistical finding to a non-technical product stakeholder.
Approach
- Name the disagreement or constraint, and how you resolved it with evidence.
- Quantify the outcome, including what you would not claim credit for.
- Pick a story where you drove the decision, not one where you observed it.
Follow-up
- How did you know the outcome was caused by your change?
- What would you do differently if you ran that project again?
Explaining an incrementality interval to a non-technical budget owner
A 20-market geo holdout has closed. Incremental return on ad spend is estimated at 1.4 with a 90% interval of 0.6 to 2.2. The same account's last-click attributed ROAS is 4.1. A vice president with no statistics background has ten minutes and must decide whether to renew a $3M annual budget. Deliverable: the explanation you give verbally plus one slide. You may not use the words confidence interval, p-value, or significance, and you must give a recommendation rather than only a range.
Approach
- The interviewer is probing whether you can carry uncertainty into a decision instead of either hiding it or hiding behind it, so convert the interval into money at the real budget first: $3M at 0.6 to 2.2 is $1.8M to $6.6M of incremental revenue, with $4.2M as the central estimate.
- Get the break-even ROAS from the advertiser's gross margin and mark where it falls inside the range. That single number turns a statistical interval into two decision regions, and it is the only quantity the executive needs to reason about.
- Explain the 4.1 without calling it wrong: it counts every conversion that followed an ad, including the ones that would have happened anyway, while the test counts only the ones that would not have. Both are computed correctly and they answer different questions.
- State what would narrow the range and what it costs, in the same units: roughly four times the markets or four times the flight length to halve the width, against the cost of running longer at current spend.
- Pre-commit to the action at each end of the range so the recommendation is falsifiable: what you do if the true value is near 0.6, and what you do if it is near 2.2.
Follow-up
- The vice president asks whether it is working, yes or no. What is your one-sentence answer?
- Break-even is 1.0 and the range is 0.6 to 2.2. Do you renew at full budget, and what would you change about the flight?
Defending a null incrementality result against a headline ROAS
Your geo holdout shows a retargeting line item's incremental conversions per $1,000 of spend are indistinguishable from zero. The same line item reports last-click ROAS of 8.3 and is the headline number in a renewal deck presented in six days. The account team believes your test is wrong; the advertiser has never questioned the 8.3. Deliverable: the internal case you make, the specific evidence you bring, the limits you concede, and the smallest reversible experiment you propose if your reading is rejected.
Approach
- The interviewer is probing whether you can hold an unpopular finding without turning it into a credibility fight, so open by granting that both numbers are computed correctly: last-click measures which touchpoint was nearest in time, the holdout measures what changed because of the spend. Framing attribution as 'wrong' converts a methodological point into a turf argument you will lose on relationship grounds.
- State the null as a bound rather than as zero. Report the minimum detectable effect the 20-market design could resolve and say 'we can rule out incremental ROAS above this value'. A null without an MDE is not a finding and is trivially dismissed as an underpowered test.
- Bring converging evidence from tables you already have, and say what each piece can and cannot show. Credit sensitivity: recompute the same conversion cohort under a second attribution_model, first-touch or even credit across in-window touchpoints, holding cohort and windows fixed, and report what share of the line item's credited volume survives; that bounds how much of the 8.3 is a property of the crediting rule rather than of the spend, and it is a sensitivity result, not a lift estimate. Harvesting signature: the share of retargeting-credited conversions whose user already had an earlier impression, click or site session inside click_window_days, together with the distribution of conversion_ts minus click_ts, where a heavy mass inside a few minutes is consistent with an ad served into a session that was already converting.
- Quantify both error directions before recommending anything: the spend at risk if you are right and ignored, and the renewal revenue at risk if you are wrong and act. This is what separates a defensible position from an ideological one.
- Propose the reversible version rather than the shutdown: a 20% budget reduction in half the matched markets for six weeks, powered against the MDE you just computed, with the analysis window extended past the flight by the click window plus ingestion lag.
Follow-up
- The account lead says telling the advertiser their favourite channel does nothing will cost us the renewal. How do you respond without either caving or escalating?
- What specific evidence would change your mind about this line item?
- How do you handle it if the budget-down test also comes back underpowered?
- 01
Describe a time you had to explain a complex machine learning model or statistical finding to a non-technical product stakeholder.
- 02
A 20-market geo holdout has closed. Incremental return on ad spend is estimated at 1.4 with a 90% interval of 0.6 to 2.2. The same account's last-click attributed ROAS is 4.1. A vice president with no statistics background has ten minutes and must decide whether to renew a $3M annual budget. Deliverable: the explanation you give verbally plus one slide. You may not use the words confidence interval, p-value, or significance, and you must give a recommendation rather than only a range.
- 03
Your geo holdout shows a retargeting line item's incremental conversions per $1,000 of spend are indistinguishable from zero. The same line item reports last-click ROAS of 8.3 and is the headline number in a renewal deck presented in six days. The account team believes your test is wrong; the advertiser has never questioned the 8.3. Deliverable: the internal case you make, the specific evidence you bring, the limits you concede, and the smallest reversible experiment you propose if your reading is rejected.
Is this an official The Trade Desk interview guide?
No. It is PracHub's own research and practice material for the Data Scientist role at The Trade Desk. Rounds and questions reflect what candidates have reported, not a process The Trade Desk has published, and they change over time. Confirm the current format and scope with your recruiter.
PracHub interview research ↗How difficult is the interview process at The Trade Desk?
The interview process is rigorous and demanding, particularly during the take-home assessment and final onsite rounds. Interviewers expect high technical precision, clean coding habits, and a deep understanding of production-scale machine learning and experimentation.
PracHub interview research ↗How much time should I invest in preparing for the take-home assessment?
Expect to spend several hours on the take-home project, as it uses realistic data and requires comprehensive data analysis and machine learning implementation. Treat this assignment as a showcase of your production-quality craft and documentation standards.
PracHub interview research ↗Are there opportunities for remote work in this role?
Many Data Scientist positions at the company offer flexible or fully remote working arrangements within designated regions, though team-specific collocation or hybrid expectations may apply depending on your geographic hub.
PracHub interview research ↗What is the typical timeline from recruiter screen to final decision?
The entire process typically spans 3 to 6 weeks, though timelines can vary based on scheduling coordination for the intensive final round panels and take-home review phases.
PracHub interview research ↗Sources & methodology 3 sources ↗
Official role evidence, timestamped platform data and clearly labeled preparation advice.
- 01PracHub interview research ↗
PracHub editorial research into this company and role, maintained with this guide. Candidate-reported, not an employer publication.
platform · Accessed 2026-09-22 - 02PracHub Data Scientist practice ↗
Cross-company practice questions for this role.
platform · Accessed 2026-09-22 - 03PracHub interview preparation framework ↗
The framework the preparation plan follows.
platform · Accessed 2026-09-22