As a Data Scientist at Procter & Gamble, you operate at the critical intersection of advanced quantitative modeling, consumer research, and large-scale supply chain and marketing operations. You build predictive systems, optimize global manufacturing processes, and design digital experiments that shape how millions of consumers interact with household-name brands daily. Your daily work directly impacts operational efficiency, product innovation, and strategic business growth across a massive global portfolio.
The role demands a unique blend of technical rigor and business acumen. You might collaborate with supply chain engineers to build surrogate simulation models for manufacturing lines, partner with marketing teams to design robust A/B testing frameworks, or develop machine learning algorithms to forecast consumer demand patterns. The scale of Procter & Gamble means your models process vast amounts of operational and transactional data, requiring exceptional engineering discipline alongside rigorous statistical thinking.
Success in this position requires you to translate complex data science concepts into actionable business strategies for non-technical stakeholders. You will face high expectations regarding both your technical execution and your alignment with the company's core leadership values. Expect an environment where collaboration, structured problem-solving, and a relentless focus on tangible business outcomes are paramount.
Online Assessment
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
Recruiter Screening
reportedData Scientist covers at least four different jobs: experimentation, product analytics, causal work on observational data, and applied modelling that ships into a system. A screening call is the cheapest place to find out which of them is being hired for, and doing that diagnosis openly reads as senior rather than fussy. Ask what the last few pieces of work on the team actually were, and roughly how a week splits between querying, modelling and stakeholder time. Then say which parts of that you have done and which you have not. Claiming the whole range is the fastest way to be caught one round later.
What to demonstrate
- Whether you can distinguish the flavours of the role and locate your own experience inside one of them honestly
- Whether you name what you have not done instead of stretching to cover every line of the posting
- Whether your hard constraints (notice period, location, work authorisation, level) surface now rather than at offer stage
How to prepare
- Map the last two years of your time into rough percentages across query writing, experiment design, modelling and stakeholder work, so a question about scope has a real answer
- Mark every responsibility in the posting as done, adjacent or new, and prepare one sentence for each adjacent item naming the closest thing you have actually built
- Decide which logistics are non-negotiable before the call so you can state them in one sentence rather than negotiating live
Technical Deep-Dives
reportedThis round decides whether someone can hand you a schema and a question and trust the number that comes back. Correctness under a clock is the bar, not clever syntax. The habit that separates strong from weak answers is checking the grain: after every join, know how many rows you expect and whether the count moved. Most wrong answers in this format are not wrong logic, they are a fan-out from a key that turned out not to be unique, or a filter applied before an aggregate when it belonged after. Say what you expect before you run it.
What to demonstrate
- Whether your row counts survive each join, and whether you notice on your own when they do not
- Deliberate handling of rows that fail to match, including whether the question needs an inner join or a left join with the non-matches kept and counted
- Whether NULLs are treated on purpose, given that a NULL compares equal to nothing and that COUNT of a column skips it
- Reaching a defensible answer inside the window instead of a refined one after it
How to prepare
- Take a two-table schema, write a join that fans out on purpose, then fix it by collapsing the many-side to one row per key before joining. Repeat until the fix is reflex rather than recall.
- Write a funnel as one query and print the distinct user count at each stage, then confirm each stage is a subset of the one above it rather than assuming it
- Do a few timed runs in a plain text box with no autocomplete and no formatter, since assessment editors often have neither
Behavioral Rounds
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.
PracHub editorial advice for the preparation topics above.
Reading revenue or cohort value before the return window closes
Returns arrive days to weeks after delivery and vary enormously by category, so a two-week-old cohort reported on gross revenue is being compared with a mature cohort reported on something close to net. In apparel the gap between the two definitions is routinely twenty to forty percent of gross, more than the effect size of almost any experiment or campaign being evaluated. Attribute refunds back to the parent order's placed date rather than the refund date, hold the reporting lag at the 95th-percentile return-initiation lag for the category, and never let a fresh cohort's gross number sit in the same table as a mature cohort's net number.
Year-over-year and week-over-week comparisons on calendar dates
Retail demand is organised around a promotional calendar and a 4-5-4 fiscal calendar, not around the Gregorian one, so aligning on calendar date puts a peak promotional week against an ordinary week whenever the event moves, and the occasional 53-week fiscal year shifts every subsequent week by one. Moving holidays compound this across markets. Compare on fiscal week with the event aligned (week-before-event, event week, week-after), state which alignment you used, and treat any single-week comparison spanning a major event as uninterpretable without that alignment.
SQL that silently fans out on a one-to-many join
State the grain of each table and the grain you want in the result before writing the join. Pre-aggregate the many side to the join key, or use EXISTS or a window function, and verify with a row count against COUNT(DISTINCT id) rather than trusting that the numbers look plausible.
Crediting a treatment for regression to the mean
Selecting a group because it is extreme (lowest-engagement users, accounts having their worst month, the bottom decile of a score) moves that group's expected next-period value back toward the average even under no treatment, by exactly as much as the selecting measure is imperfectly correlated with its own later value. Compare against units that met the same selection rule and went untreated, or use two pre-periods so the bounce-back is visible before the intervention starts. A pre-post number on a group chosen for being extreme measures the selection rule, not the treatment.
Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.
Examine your mastery of probability, hypothesis testing, and rigorous …
Examine your mastery of probability, hypothesis testing, and rigorous statistical modeling techniques.
Approach
- Sanity-check the answer against a simple bound or a simulated case.
- Say what the estimate is of, and over what population it generalises.
- Quantify uncertainty explicitly rather than reporting a point estimate alone.
Follow-up
- What sample size would you need to detect an effect half this size?
- Which assumption here is most likely to be violated in practice?
How would you evaluate the long-term impact of introducing a subscript…
How would you evaluate the long-term impact of introducing a subscription model for a traditionally retail-only product line?
Approach
- Pick an evaluation metric that matches the cost of each error type, not a default.
- Say how the offline result would be validated online before it is trusted.
- Check what information would not exist at prediction time, and exclude it.
Follow-up
- How would you choose the decision threshold, and who owns that choice?
- Where could label leakage enter this setup?
Implement demand-weighted in-stock rate from a written definition
inventory has one row per snapshot_date, sku_id, node_id with columns node_type, minutes_unavailable (0 to 1440), was_listed (bool), forecast_units (nullable float) and gross_units_sold. Implement the weekly demand-weighted in-stock rate per node: numerator sums forecast_units * (1440 - minutes_unavailable) / 1440 over rows with was_listed True, denominator sums forecast_units over the same rows. Weeks start Monday. Also return the unweighted rate, the share of eligible rows dropped for a null forecast, and the count of SKUs behind each week.
Approach
- Write the eligibility filter once as a boolean mask (was_listed and forecast_units notna) and apply it to numerator and denominator together, since a row eligible for one and not the other silently changes the metric's meaning.
- Clip minutes_unavailable to [0, 1440] and check how many rows needed clipping, because an out-of-range value from a clock or restart bug produces an availability factor above 1 or below 0 and a rate that leaves [0, 1].
- Derive the week key with snapshot_date - to_timedelta(dayofweek, 'D') rather than dt.isocalendar().week, which returns a year-agnostic integer and collides across years at the turn of January.
- Aggregate numerator and denominator separately by (node_id, week) and divide at the end. Never take the mean of daily rates: a week rolls up by re-summing both sides, and a low-demand day would otherwise carry the same weight as a peak day.
- Compute the unweighted rate as the simple mean of the availability factor over the same rows and report both, so the long-tail distortion is visible rather than assumed.
Worked solution 20 min
- Apply the eligibility mask, then assert that numerator and denominator are computed over frames of identical length.
- Add availability_factor = (1440 - minutes_unavailable.clip(0, 1440)) / 1440 and assert it lies in [0, 1].
- Group by node_id and week_start, sum forecast_units * availability_factor and forecast_units, divide.
- Compute the unweighted mean of availability_factor over the same groups and put both columns side by side.
- Construct a check case: ten tail SKUs with forecast 1 and full availability plus one hero SKU with forecast 1000 and half the day unavailable. The weighted rate is (10 + 500) / 1010 = 0.505; the unweighted rate is (10 + 0.5) / 11 = 0.955.
Follow-up
- forecast_units is the number the buy was placed against, so it is wrong exactly when the forecast was wrong. What else could weight this, and what does each alternative bias?
- A SKU with was_listed False all week disappears from both sides. Is that the right behaviour, and how would you separate 'not stocked here' from 'stocked out here'?
- The rate is 97 percent but the merchandising team says the top sellers are empty. What cut of this data would you show to settle it?
Extract the top three highest-selling product categories per region us…
Extract the top three highest-selling product categories per region using advanced SQL joins and ranking functions.
Approach
- Handle the rows that do not match: a LEFT JOIN with a NULL check is usually the question.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which table is the grain you start from, and join outward from it.
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?
Test your ability to write efficient queries, handle complex data tran…
Test your ability to write efficient queries, handle complex data transformations, and solve data-wrangling challenges.
Approach
- 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.
- Say which table is the grain you start from, and join outward from it.
Follow-up
- What breaks if events arrive late or out of order?
- How does the query change if the join becomes one-to-many?
Contribution margin per delivered order across order, return and shipping costs
Compute contribution margin per delivered order for orders placed in one month, from fct_order_line (order_id, order_line_id, quantity, unit_paid_price_cents, unit_cost_cents, shipping_charged_cents, shipping_cost_cents, tax_cents, payment_method, line_status, placed_at_utc, fx_rate_to_usd) and fct_return_line (order_line_id, quantity_returned, refund_amount_cents, return_shipping_cost_cents, restocking_fee_cents, recovered_value_cents). Shipping columns are already line-level allocations. Assume a processing fee of 2.4 percent of merchandise plus shipping plus tax collected on card, wallet and bnpl, zero otherwise. Attribute refunds to the parent order's placed month. Return per-order margin and the month mean.
Approach
- Pre-aggregate fct_return_line to order_line_id before touching the order lines, summing quantity_returned, refund_amount_cents, return_shipping_cost_cents, restocking_fee_cents and recovered_value_cents. Joining raw would multiply every cost column on the order side.
- Cost all units that were shipped, not only the ones kept. A returned unit was still picked, packed and freighted, so quantity * unit_cost_cents stays in full and only recovered_value_cents comes back on the credit side.
- Treat recovered_value_cents NULL as ungraded, not as zero. COALESCE to zero understates recovery for recent months and makes margin look worse the fresher the data is; either restrict to graded returns or report the ungraded unit count beside the number.
- Compute the processing fee at the line from the amount actually collected, including shipping_charged_cents and tax_cents, and gate it on payment_method so gift_card and cash_on_delivery lines carry none.
- Apply fx_rate_to_usd per line before aggregating, then roll to order_id, restricting the denominator to orders with at least one delivered line.
- Present the per-order margin distribution, not only the mean: a handful of high-value returned orders dominate the average and the median tells a different story.
Worked solution 40 min
- Build returns_by_line with the five SUMs and a COUNT of ungraded (recovered_value_cents IS NULL) rows.
- LEFT JOIN onto delivered order lines placed in the month and compute per-line revenue, cost, recovery, shipping and fee terms in USD.
- Aggregate to order_id, producing net_revenue_usd, cost_usd, recovery_usd, shipping_net_usd, fee_usd and margin_usd.
- Compute the month mean over distinct delivered orders, plus the median and the 10th percentile.
- Report the share of orders whose returns are still ungraded, and restate the mean with those orders excluded.
Follow-up
- Which orders are margin-negative, and is the pattern driven by return rate, discount depth or shipping cost? How would you separate them?
- This excludes warehouse fixed cost and marketing. When does that make the number the wrong one to put in front of a decision?
- Free shipping above a threshold changes both shipping_charged_cents and basket composition. How do you read margin across that change?
Walk me through your step-by-step framework for investigating a sudden…
Walk me through your step-by-step framework for investigating a sudden metric drop diagnosis in weekly active users.
Approach
- State what result would change your recommendation, so the answer is falsifiable.
- Fix the population and the time window before naming any metric.
- Restate the decision this analysis has to support, and who acts on the answer.
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?
What operational metrics would you monitor to detect anomalies in glob…
What operational metrics would you monitor to detect anomalies in global supply chain inventory forecasts?
Approach
- Decompose the metric into the rates that drive it, and say which one you would check first.
- Name one primary metric, then the guardrail that stops it being gamed.
- State what result would change your recommendation, so the answer is falsifiable.
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?
What evaluation metrics would you choose for a heavily imbalanced data…
What evaluation metrics would you choose for a heavily imbalanced dataset predicting consumer churn?
Approach
- State what result would change your recommendation, so the answer is falsifiable.
- 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
- How would you detect that the metric is being gamed rather than genuinely improving?
- Which segment would you cut first, and what would that rule out?
Assess how you design metrics, evaluate user behavior, and connect dat…
Assess how you design metrics, evaluate user behavior, and connect data science initiatives to core business value.
Approach
- 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.
- 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?
- How would you detect that the metric is being gamed rather than genuinely improving?
What are the most common experimentation pitfalls you encounter when r…
What are the most common experimentation pitfalls you encounter when running concurrent digital marketing campaigns?
Approach
- Say whether units interfere with each other, and switch design if they do.
- State the primary metric and the minimum effect worth shipping, then size the test.
- Decide the analysis before seeing data, including how long it runs and when you look.
Follow-up
- How would you handle interference between treated and control units?
- What would you conclude if the result is positive but the test is underpowered?
Evaluate your understanding of experimental design, metric tracking, a…
Evaluate your understanding of experimental design, metric tracking, and the mathematical foundations of testing.
Approach
- Decide the analysis before seeing data, including how long it runs and when you look.
- 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.
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?
What key indicators would you track to monitor the health of an online…
What key indicators would you track to monitor the health of an online recommendation engine for household products?
Approach
- Say what you would check first and why it is the highest-information step.
- State your assumptions explicitly before working the problem.
- Work from the decision backwards to the evidence you would need.
Follow-up
- How would you know your answer was wrong?
- What assumption would you test first?
Make on-time-in-full honest when the team sets the promise
Fulfilment is measured on on-time-in-full: orders where every line has delivered_at_utc at or before promised_delivery_at_utc and no line is cancelled_out_of_stock or undeliverable. The same team sets promised_delivery_at_utc. The rate rose from 91 to 97 percent over a quarter with no operational change reported. Using fct_order_line and fct_session, design the metric set that makes this number honest. Deliverable: the primary, the guardrail that closes the gaming route, and the customer-side metric neither of those captures.
Approach
- Name the loophole. promised_delivery_at_utc is an input controlled by the team being measured, so the rate can be driven to any level by padding the promise. A metric whose own target is set by the measured party is an agreement, not a measurement.
- Keep on-time-in-full as the primary, computed at order grain rather than line grain, because a customer receiving three of four items has not had an order delivered in full. But pin the promise: publish median and 90th-percentile promised horizon (promised_delivery_at_utc minus placed_at_utc) by node and destination zone as a guardrail with its own target that cannot move without sign-off.
- Add the absolute measure the pair still misses: actual click-to-door time, the distribution of delivered_at_utc minus placed_at_utc at p50 and p90. A padded promise and a slower network produce the same on-time rate with opposite customer experiences, and only this metric separates them.
- Quantify how much of the quarter's gain was padding. Recompute the end-of-quarter rate against the start-of-quarter promise distribution, matched on node and destination zone. The gap between actual and fixed-promise rate is the padding contribution, stated as points rather than described.
- Audit the denominator. Orders with lines still in non-terminal states are excluded, so a growing backlog of stuck orders improves the published rate silently. Report the count and age distribution of excluded orders next to it.
- Bring in the demand side that fulfilment metrics cannot see: conversion rate and revenue per session by promised-horizon bucket, from fct_session joined to orders, controlled for device_type and entry_channel. Label it observational, because promise horizon correlates with node coverage and SKU mix, so the gradient is an association until a promise test is run.
Worked solution 35 min
- Compute on-time-in-full at order grain by week for the quarter, requiring every line terminal and none cancelled_out_of_stock or undeliverable, and record the count of orders excluded for non-terminal lines.
- Compute the promised horizon distribution at p50 and p90 by week, fulfilment node and destination zone.
- Compute click-to-door at p50 and p90 on the same cut.
- Recompute the end-of-quarter rate against the start-of-quarter promise horizon, matched on node and destination zone, and report the difference as the padding contribution in points.
- Join fct_session to orders and estimate conversion and revenue per session by promised-horizon bucket, controlling for device_type and entry_channel, labelled as observational.
Follow-up
- On-time-in-full is 97 percent, p90 click-to-door is unchanged, promised horizon is up two days. What happened, and what do you tell the team?
- Conversion falls 1.5 percent when the promise moves from two days to four. How do you turn that into a target for promise horizon?
- Would you split the metric into on-time and in-full? What do you gain and what do you lose?
Revenue up six percent, margin per order down eleven
Net merchandise revenue rose 6% month over month while contribution margin per delivered order fell 11%. You have fct_order_line (quantity, unit_list_price_cents, unit_paid_price_cents, line_discount_cents, discount_funding, promotion_id, unit_cost_cents, shipping_charged_cents, shipping_cost_cents), fct_return_line (refund_amount_cents, return_shipping_cost_cents, restocking_fee_cents, recovered_value_cents, disposition) and dim_sku (category_l1, is_own_brand). Deliverable: attribute the margin decline to named drivers measured in cents per delivered order that reconcile to the full 11%, and label each driver as a policy choice or a mix effect.
Approach
- Write contribution per delivered order as an additive identity before touching data: net merchandise revenue, minus landed cost of units shipped, plus recovered value on returns, minus outbound and return shipping cost, minus payment fees, plus shipping charged and restocking fees, all over delivered orders. Compute every term for both months so the decline reconciles term by term with no residual bucket larger than the smallest named driver.
- Split each term into rate and mix the same way as any blended metric. Discount per order is depth per unit times units per order; a category mix shift changes blended depth with no price change anywhere, and that distinction decides whether merchandising or pricing owns the answer.
- Separate discount_funding before drawing any conclusion about discounting. Supplier-funded depth does not consume retailer margin, so a rise in promotional depth funded by suppliers is not a driver and must be excluded from the discount term.
- Work the returns terms properly: attribute refunds back to the parent order's placed month rather than the refund month, and check recovered_value_cents per returned unit by disposition. A shift from restock_a_grade toward liquidate or destroy cuts margin with no change in return rate at all.
- Work the freight terms: shipping_cost_cents per delivered order against shipping_charged_cents per delivered order. A lowered free-shipping threshold raises orders and revenue while turning charged freight into subsidised freight, which is exactly the pattern of revenue up and margin down.
- Rank the drivers by cents per order, label each policy or mix, and state which single decision would recover the most margin and what it would cost in revenue.
Follow-up
- Your decomposition leaves a residual of a few cents per order. How do you decide whether to chase it or name it?
- The free-shipping threshold change was a deliberate test. What would you need to call it a win or a loss, and over what horizon?
- Finance's gross margin does not match your contribution figure. Which differences are expected by construction and which would worry you?
Instead of guessing where the week should go, day one measures it under a fixed rubric and allocates the remaining hours in proportion to the gaps. The method is deliberately rigid: the allocation is written down before any studying starts and is not renegotiated when a topic turns out to be unpleasant.
Prepare, practise & reflect
One practical outcome each day. Spend longer where you need it.
0 / 7 done01Diagnostic, scored before you study anything
- Sit a 100-minute timed diagnostic in four blocks: 30 minutes of SQL across three prompts, 25 minutes of short-answer statistics, 25 minutes on one modelling or case prompt, and 20 minutes delivering one behavioural story aloud.
- Score each block from 0 to 3 on a fixed rubric where 3 is correct and fluent, 2 is correct but slow or prompted, 1 is partially correct, and 0 is stuck, grading the output rather than how the attempt felt.
- Allocate the hours for days two to five roughly in proportion to 3 minus the score in each block, write the allocation down, and commit to not revising it midweek.
Deliverable: A scored rubric and a fixed hour allocation for the rest of the week.
Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗02Largest gap: find the boundary rather than the subject
- Break the weakest area into five named sub-skills (for query work: grain control, window frames, date arithmetic, set logic with NULLs, and reading a query plan) and rate each one, so the rest of the week targets a sub-skill instead of a subject.
- Solve three problems chosen to sit just above where the rating drops off, and for each write the first move you failed to make.
- Re-solve one of them from memory four hours later, on paper, with nothing open.
Deliverable: A five-item sub-skill map with the two blocking sub-skills circled.
Practice prompt ↗Practice prompt ↗Practice prompt ↗03Largest gap: drill the blocking sub-skill
- Do eight short repetitions of the same shape rather than eight different problems, so what you practise is the pattern and not the puzzle.
- Write the rule you now hold in one sentence, then test it against a case built to break it: a ranking function over a column with ties, or a two-sample test on observations that are obviously dependent.
- Have someone else read your one-sentence rule and find the precondition you left out.
Deliverable: One rule statement with its preconditions attached and one counterexample that would have caught the incomplete version.
Practice prompt ↗Practice prompt ↗Practice prompt ↗04Second gap, plus maintenance on your strongest area
- Run the same sub-skill map and boundary protocol on the second-largest gap, compressed into half the day.
- Spend 25 timed minutes on your strongest area to stop it decaying, choosing the hardest problem you can still finish rather than an easy warm-up.
- Compare how the two areas fail: whether you lose time on recall, on setup, or on arithmetic, because the fix differs for each.
Deliverable: A second sub-skill map plus a one-line diagnosis of how each area fails you.
Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗05The gap that is not a skill
- Record yourself answering one technical and one behavioural prompt, then count two things in the playback: how many seconds before your first clarifying question, and how many sentences you started without knowing where they ended.
- Rewrite your three most-used stock phrases into shorter versions, and practise saying "I do not know, here is how I would find out" without softening it into a guess.
- Deliver one answer again with a hard 90-second limit to force structure before detail.
Deliverable: Two recordings with a counted improvement in time-to-first-question.
Practice prompt ↗Practice prompt ↗06Retest under day-one conditions
- Sit the same 100-minute diagnostic structure with new prompts of comparable difficulty and score it on the identical rubric.
- Compare block by block, and for any block that did not move, change the method rather than adding hours: a block stuck at 1 usually means the practice was too varied, not too short.
- Write which single block you would still lose the offer on.
Deliverable: A second scored rubric placed next to the first, with one named remaining risk.
Practice prompt ↗Practice prompt ↗07Full loop under interview conditions
- Run a 60-minute mock covering the two blocks that moved least, with an interviewer instructed to interrupt and change direction.
- Write your recovery script for the moment you go blank: restate the question, state your assumption, name the first thing you would check.
- Reduce the week to the rule statements you wrote, each with its preconditions attached, then say every one of them out loud without reading it and cut any you cannot state in a single sentence, since a rule you have to reconstruct mid-answer will not survive being interrupted.
Deliverable: A one-page card holding the recovery script and only the rules you could state from memory.
Practice prompt ↗Practice prompt ↗Worked solution ↗Expand any day for tasks and deliverables. Your progress is saved on this device.
An answer without a quantity is hard to interrogate, so interviewers keep probing until they find one. Come with the baseline, the change, the window it was measured over, and how confident you were. If the effect never got measured, say so and say what you would have measured. Fabricated precision is worse than an honest gap.
How do you manage competing priorities from multiple business stakehol…
How do you manage competing priorities from multiple business stakeholders when your engineering bandwidth is limited?
Approach
- State the situation in two sentences and spend the rest on your reasoning.
- Pick a story where you drove the decision, not one where you observed it.
- Quantify the outcome, including what you would not claim credit for.
Follow-up
- What would you do differently if you ran that project again?
- What did you decide not to do, and why?
Choose between three teams asking for the same week
Three requests land on the same Monday. Merchandising wants a size-curve read before a buy deadline on Thursday. Growth wants a channel attribution rebuild that has been requested twice and dropped twice. Supply chain wants a stockout root-cause on a category that cancelled four thousand units last month. You have one week and no help, and each requester believes theirs is first. State what you do, in what order, and what you tell the two people who do not get the week.
Approach
- Sort by the decision behind each request rather than by who sent it. A buy deadline is an irreversible commitment with a fixed date; an attribution rebuild changes no decision this week.
- Ask each requester two questions: which decision changes, and what happens if the answer lands a week later. Those two separate a real deadline from felt urgency without arguing about either.
- Look for the cheap partial before assuming any request consumes the week. If the size curve already exists at style grain, the merchandising read may be two hours rather than four days.
- Decline explicitly with a start date attached instead of leaving a request in a silent queue. Growth has been dropped twice, so a third silent drop is a relationship cost you are choosing to pay; name it rather than incur it by default.
- Escalate the collision upward once, with the three decisions and their dates side by side, so the tradeoff is resolved where it is owned rather than by whoever follows up hardest.
Follow-up
- Growth escalates to your manager saying analytics never supports them. What did you do before that happened, and what do you do now?
- The buy deadline moves to Tuesday. What do you cut from the size-curve read, and what do you refuse to cut?
Defend a promotion read that contradicts the revenue number
You analysed a site-wide twenty-percent weekend event. Revenue over the event week rose eleven percent year over year, contribution margin per delivered order fell, and the two weeks after the event ran below the pre-period baseline. The merchandising lead who owns the event calendar has already circulated the revenue figure. You have ten minutes at a planning meeting attended by that lead and their director. Deliver the finding and the recommendation you would make for the next event, and describe how you handle the pushback in the room.
Approach
- Before the meeting, write the finding as one sentence about the event, not about the person who owns it: the event moved price and timing, not demand. Keeping the event owner's judgement out of the sentence is what keeps the holdout you want on the table.
- Open with the number they already have, then decompose revenue into traffic, conversion, units per order, net price per unit and keep rate, and show which term moved. If price per unit fell and units per order held, the revenue gain was volume bought at a lower price.
- Quantify the post-period dip as the pull-forward estimate, and state the measurement window explicitly. The window has to extend past the event because the demand was borrowed from the weeks after it.
- Convert to incremental contribution margin. At gross margin m on list price and discount depth d, holding contribution flat requires a unit lift of d / (m - d), valid when m > d, when the discount applies to every unit sold, when unit cost is constant, and when nothing was cannibalised from full-price SKUs. Compare the observed lift to that threshold.
- Say what would change your mind and propose the design that would settle it: a geo or customer holdout on the next event, with the number of units and weeks it needs.
- End on the next event, not a verdict on the last one, so the meeting produces a decision rather than a defence.
Follow-up
- The lead says the event acquired new customers whose lifetime value justifies the margin loss. How would you test that claim with dim_customer and fct_order_line?
- Your director wants one number to take to finance. Which one, and what caveat travels with it?
- 01
How do you manage competing priorities from multiple business stakeholders when your engineering bandwidth is limited?
- 02
Three requests land on the same Monday. Merchandising wants a size-curve read before a buy deadline on Thursday. Growth wants a channel attribution rebuild that has been requested twice and dropped twice. Supply chain wants a stockout root-cause on a category that cancelled four thousand units last month. You have one week and no help, and each requester believes theirs is first. State what you do, in what order, and what you tell the two people who do not get the week.
- 03
You analysed a site-wide twenty-percent weekend event. Revenue over the event week rose eleven percent year over year, contribution margin per delivered order fell, and the two weeks after the event ran below the pre-period baseline. The merchandising lead who owns the event calendar has already circulated the revenue figure. You have ten minutes at a planning meeting attended by that lead and their director. Deliver the finding and the recommendation you would make for the next event, and describe how you handle the pushback in the room.
Is this an official Procter & Gamble interview guide?
No. It is PracHub's own research and practice material for the Data Scientist role at Procter & Gamble. Rounds and questions reflect what candidates have reported, not a process Procter & Gamble has published, and they change over time. Confirm the current format and scope with your recruiter.
PracHub interview research ↗How difficult is the interview loop, and how much preparation time should I plan for?
The interview loop is moderately to highly difficult, primarily due to the strict evaluation of leadership competencies alongside technical depth. Plan for at least four to six weeks of dedicated preparation, giving equal weight to behavioral storytelling and technical problem-solving.
PracHub interview research ↗Is there a live coding round in the technical interviews?
Yes, depending on the specific team, you may encounter live coding tasks focusing on SQL data manipulation or concise data processing scripts in Python or pandas. Practice writing clean, bug-free code under observation without relying heavily on autocomplete tools.
PracHub interview research ↗How are behavioral interviews evaluated?
Behavioral rounds are evaluated against specific corporate leadership competencies using structured scoring rubrics. Interviewers listen closely for specific actions you took, the rationale behind your decisions, and the measurable business impact you delivered.
PracHub interview research ↗What is the typical timeline from the initial recruiter screen to a final offer?
The entire process generally spans between four to eight weeks, depending on scheduling coordination across multiple global interviewers. Maintain proactive communication with your HR representative to keep your timeline moving smoothly.
PracHub interview research ↗Sources & methodology 3 sources ↗
No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.
- 01PracHub interview research ↗
PracHub editorial research into this company and role, maintained with this guide. Candidate-reported, not an employer publication.
PracHub page · Accessed 2026-09-22 - 02PracHub Data Scientist practice ↗
Cross-company practice questions for this role.
PracHub page · Accessed 2026-09-22 - 03PracHub interview preparation framework ↗
The framework the preparation plan follows.
PracHub page · Accessed 2026-09-22