← Expedia Interview Insights

Expedia·Data Scientist·Technical Phone Screen·Senior

Senior
May 2026

Summary

Technical screen for a DS role at Expedia that went deep into data quality and pipeline validation for hotel search data. The question was essentially one long case study, and it covered a lot of ground fast.

Questions Asked (7)

Q1

You've inherited an unfamiliar hotel search dataset with almost no documentation. Walk through how you'd systematically explore the schema, verify keys, and understand what tables actually represent.

Data ModelingRoot Cause Analysis
Author's notes

Started with information_schema and just ran describe on everything, which felt obvious but they seemed fine with it.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by describing a top-down, iterative process: first profile the dataset at a high level (row counts, column types, sample values), then drill into relationships and keys, and finally validate your understanding against domain logic and business rules. Emphasize that you'd document findings as you go and use both automated profiling and manual spot-checks to build confidence.

Pro tip: Mention that you'd look for 'data dictionaries in disguise'—naming conventions, comments in DDL, or even ETL logs—and always validate keys by checking uniqueness and referential integrity before trusting them.

1. High-level profiling

Run summary statistics (row counts, distinct values, null percentages, min/max) for every column to get a quick sense of data distribution and potential issues.

2. Schema and relationship discovery

List all tables and columns, then identify candidate primary and foreign keys by checking uniqueness and matching values across tables.

3. Key verification

Test candidate keys for uniqueness (e.g., COUNT vs COUNT DISTINCT) and check referential integrity between related tables to confirm relationships.

4. Semantic interpretation

Examine sample rows and value distributions to infer what each table represents (e.g., fact vs dimension) and how they connect to business entities like hotels, searches, and bookings.

5. Validation and documentation

Cross-check findings with domain knowledge or business rules, and document the schema, keys, and assumptions for future reference.

Key Points to Mention

  • Data profiling techniques (e.g., pandas-profiling, SQL summary queries)
  • Primary and foreign key identification and validation
  • Referential integrity checks
  • Distinguishing fact and dimension tables
  • Using domain knowledge to interpret table purposes
  • Documentation and iterative refinement

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

How would you profile distributions, missingness, and issues around timezones, locale, and currency across a travel dataset?

Product Analytics & MetricsData Modeling
Author's notes

Currency was the one I actually had a decent answer for since I'd dealt with FX normalization before.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by outlining a systematic data profiling plan: first understand the dataset structure and key variables, then compute summary statistics and missingness patterns, and finally deep-dive into timezone, locale, and currency inconsistencies. Emphasize how these issues impact downstream analysis and model reliability, and propose concrete validation and remediation steps.

Pro tip: Highlight that timezone and currency issues often stem from inconsistent data capture at the source, so profiling should include tracing data lineage and checking for mixed standards (e.g., local vs. UTC timestamps, currency codes vs. symbols). Demonstrating awareness of Expedia's global user base and multi-currency transactions will show business acumen.

1. Understand dataset structure and key variables

Identify tables, columns, and data types, focusing on fields related to time (booking, search, travel dates), location (user and property), and monetary values (price, fees). Document expected formats and standards.

2. Profile distributions and missingness

Compute summary statistics (mean, median, percentiles, histograms) for numerical variables and frequency counts for categoricals. Quantify missingness per column and investigate patterns (e.g., missing currency for certain locales).

3. Audit timezone handling

Check timestamp fields for consistency (UTC vs. local), detect ambiguous or out-of-range values, and verify that timezone offsets are correctly applied. Cross-validate with user location and property location data.

4. Validate locale and currency consistency

Examine locale codes (language, country) for validity and consistency with user profiles. For currency, check that amounts are stored with correct currency codes, detect mixed symbols or missing conversions, and verify exchange rates if applicable.

5. Summarize findings and propose remediation

Document identified issues, their prevalence, and potential impact on analysis. Suggest data cleaning steps, standardization rules (e.g., convert all timestamps to UTC, enforce ISO currency codes), and monitoring to prevent future issues.

Key Points to Mention

  • Use of profiling tools (e.g., pandas-profiling, Great Expectations) to automate distribution and missingness analysis.
  • Importance of distinguishing between missing at random and missing not at random, especially for currency fields.
  • Timezone pitfalls: daylight saving time, ambiguous timestamps during DST transitions, and storing local vs. UTC.
  • Currency handling: ISO 4217 codes, avoiding symbols, and ensuring conversion rates are applied consistently.
  • Locale nuances: language and country combinations, and how they affect date formats, number formats, and user segmentation.
  • Impact on modeling: biased estimates, incorrect aggregations, and feature engineering challenges if timezone/currency issues are not addressed.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

How do you detect duplicate records and join inflation when linking searches, impressions, clicks, bookings, and cancellations?

Data ModelingRoot Cause Analysis
Author's notes

This is where I should've talked about counting before joining.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by explaining that duplicate records and join inflation are common when combining event-level data at different grains, so you first validate uniqueness at each table's natural key and then check row counts before and after each join. Walk through a systematic process: profile keys, use anti-joins and aggregation to detect duplicates, and compare pre/post-join counts to catch inflation, then propose mitigation like deduplication windows or pre-aggregation.

Pro tip: Emphasize that you always validate join cardinality with a quick 'count before vs. after' check and a fan-out ratio per key—this shows you think in terms of data integrity, not just query results. Mentioning that you'd automate these checks as data quality tests in the pipeline demonstrates production maturity.

1. Profile keys and grains

Identify the natural key and expected grain for each table (e.g., search_id, impression_id, click_id, booking_id) and confirm whether keys are unique or require composite keys. Document expected row counts per key to establish a baseline.

2. Detect duplicates with anti-joins and group-bys

Run GROUP BY key HAVING COUNT(*) > 1 queries and anti-joins (e.g., LEFT JOIN ... WHERE right.key IS NULL) to surface duplicate or orphan records. Check for near-duplicates using fuzzy matching on timestamps or user IDs when exact keys are unreliable.

3. Measure join inflation via cardinality checks

Compare row counts before and after each join and compute a fan-out ratio (post-join rows / pre-join rows) per key. Flag any ratio > 1 as potential inflation and drill into the offending keys to understand the cause (e.g., multiple impressions per search).

4. Mitigate with deduplication and pre-aggregation

Apply window functions (ROW_NUMBER) to keep the latest or first record per key, or pre-aggregate to the desired grain before joining. Use DISTINCT or GROUP BY at the appropriate level and validate that business metrics (e.g., conversion rate) remain stable.

5. Automate checks and monitor

Codify uniqueness and cardinality checks as data quality tests in the pipeline (e.g., dbt tests or Great Expectations) and set alerts for unexpected fan-out. Periodically review join logic as new data sources are added.

Key Points to Mention

  • Natural keys and grain of each event table (searches, impressions, clicks, bookings, cancellations)
  • Use of GROUP BY ... HAVING COUNT(*) > 1 and anti-joins to find duplicates
  • Fan-out ratio and pre/post-join row count comparison to detect inflation
  • Window functions (ROW_NUMBER, RANK) for deduplication
  • Pre-aggregation to the correct grain before joining
  • Automated data quality tests (e.g., dbt, Great Expectations) for ongoing monitoring

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

How would you validate that events follow the correct sequence (search to impression to click to booking to cancellation), and how do you handle late-arriving data?

Data ModelingSystem Design
Author's notes

Watermarking came up and I gave a reasonable answer about setting a late arrival window based on observed lag distributions.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by describing how you would model the event sequence as a state machine or funnel with defined valid transitions, then explain validation techniques like sequence checks, timestamp ordering, and anomaly detection. For late-arriving data, discuss strategies such as event-time processing with watermarks, session windows, and reconciliation jobs to handle out-of-order events.

Pro tip: Emphasize that late-arriving data is inevitable in distributed systems, so design for it upfront with event-time semantics and idempotent processing rather than treating it as an exception.

1. Define the expected sequence and valid transitions

Model the funnel as a state machine with allowed transitions (e.g., search → impression → click → booking → cancellation) and specify constraints like timestamps must be non-decreasing within a session.

2. Implement sequence validation checks

Use SQL window functions or stream processing to verify that events occur in the correct order per user/session, flagging violations such as a click before an impression or a booking without a prior click.

3. Handle late-arriving data with event-time processing

Process events based on event timestamps rather than arrival time, using watermarks and allowed lateness in stream processing (e.g., Apache Flink, Spark Structured Streaming) to accommodate out-of-order events.

4. Reconcile and backfill late data

Run periodic batch reconciliation jobs to reprocess late events and update downstream aggregates, ensuring idempotency to avoid double-counting.

5. Monitor and alert on sequence violations and lateness

Set up dashboards and alerts for sequence anomalies and late data volumes, enabling quick detection and remediation of data quality issues.

Key Points to Mention

  • State machine or funnel model for event sequences
  • Event-time vs. processing-time semantics
  • Watermarks and allowed lateness in stream processing
  • Idempotent processing and exactly-once guarantees
  • Batch reconciliation and backfilling for late data
  • Monitoring and alerting for data quality

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q5

Walk through how you'd correctly compute metrics like bookings per search within a 7-day window, margin as price minus cost, and the difference between GMV and contribution margin.

Product Analytics & MetricsPricing & Monetization
Author's notes

The GMV vs contribution margin distinction is something I've explained before so that part was fine.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying definitions and assumptions for each metric, then walk through the computation logic step by step, emphasizing data sources, joins, and edge cases. Use a structured framework to show how you'd implement each metric in SQL or code, and highlight potential pitfalls like time zone handling and denominator choices.

Pro tip: Demonstrate product intuition by explaining why these metrics matter for Expedia—e.g., bookings per search as a conversion proxy, margin as a profitability driver, and GMV vs. contribution margin as top-line vs. bottom-line views. Also mention how you'd validate results with sanity checks and stakeholder alignment.

1. Clarify definitions and assumptions

Confirm what 'bookings per search' means (e.g., unique bookings divided by unique searches), the 7-day window (rolling vs. fixed, time zone), and how margin and GMV are defined (e.g., GMV includes taxes/fees, margin excludes them).

2. Identify data sources and joins

Specify tables for searches, bookings, pricing, and costs; describe how to join them on user/session and date keys, and handle missing or duplicate records.

3. Compute bookings per search

Aggregate searches and bookings within the 7-day window per user or session, then divide total bookings by total searches, ensuring consistent denominators and handling zero-search cases.

4. Compute margin and GMV

For each booking, calculate margin as price minus cost, and GMV as total booking value (including taxes/fees). Sum these over the window and compare to show the difference.

5. Validate and interpret

Run sanity checks (e.g., margin ≤ GMV, no negative values), compare with historical trends, and explain business implications of each metric.

Key Points to Mention

  • Time window definition: rolling 7-day vs. fixed 7-day period, and time zone consistency
  • Denominator choice for bookings per search: unique searches vs. search sessions, and handling users with zero searches
  • GMV vs. contribution margin: GMV is top-line revenue including taxes/fees, while contribution margin subtracts variable costs (e.g., supplier cost, payment fees)
  • Data quality: deduplication, missing cost data, and outlier handling
  • SQL implementation: window functions for rolling windows, joins, and aggregation
  • Business context: how these metrics inform pricing, marketing, and product decisions at Expedia

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q6

How would you write data quality tests and data contracts covering nullability, uniqueness, referential integrity, and numeric range checks for this kind of pipeline?

Data ModelingTechnical Trade-offs
Author's notes

Pretty standard territory if you've used any testing framework for data pipelines.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by framing data quality tests and contracts as complementary layers: contracts define expectations at the pipeline boundary, while tests enforce them continuously. Then walk through each dimension (nullability, uniqueness, referential integrity, numeric range) with concrete examples of how you'd implement them in a typical Expedia-style pipeline, emphasizing trade-offs like test coverage vs. performance and where to place checks (ingestion vs. transformation).

Pro tip: Tie each check to a business impact—e.g., null hotel IDs break personalization, duplicate bookings inflate revenue metrics—and mention how you'd prioritize tests based on data criticality and failure cost. This shows you think like a product-minded data scientist, not just a tester.

1. Define the data contract

Specify schema, semantics, and quality expectations (e.g., nullability, uniqueness, ranges) for each dataset at the producer-consumer boundary, using a machine-readable format like YAML or JSON Schema. Include ownership and SLAs to make expectations enforceable.

2. Map checks to pipeline stages

Decide where each test runs: at ingestion (raw data), after transformation (cleaned data), and before serving (final tables). For example, referential integrity checks belong after joins, while nullability checks can run early to fail fast.

3. Implement tests per dimension

For nullability, assert non-null on critical fields; for uniqueness, use primary key or composite key checks; for referential integrity, validate foreign keys against dimension tables; for numeric range, enforce min/max or statistical bounds (e.g., price > 0, rating between 1-5).

4. Automate and integrate with CI/CD

Run tests as part of the pipeline orchestration (e.g., Airflow, dbt tests) and block deployments or alerts on failures. Use a framework like Great Expectations or dbt tests to codify checks and generate reports.

5. Monitor and iterate

Track test pass rates and data quality metrics over time, alert on anomalies, and review failures to refine contracts and tests. Treat data quality as an ongoing process, not a one-time setup.

Key Points to Mention

  • Data contracts as enforceable agreements between producers and consumers, including schema and quality rules
  • Specific test implementations: e.g., dbt tests (not_null, unique, relationships, accepted_values) or Great Expectations expectations
  • Trade-offs: test coverage vs. pipeline latency, strictness vs. flexibility, and cost of false positives
  • Handling edge cases: late-arriving data, schema evolution, and how to version contracts
  • Business impact prioritization: focusing tests on critical fields (e.g., booking_id, price) that affect revenue or user experience
  • Integration with orchestration tools and alerting for proactive data quality management

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q7

What are specific pitfalls in travel data around multi-room bookings, partial cancellations, rebookings, cross-currency FX timing, and adult vs. child guest counts, and how would you detect each?

Product Analytics & MetricsRoot Cause AnalysisPricing & Monetization
Author's notes

This was the most interesting part of the whole conversation.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Structure your answer by first categorizing each pitfall (multi-room bookings, partial cancellations, rebookings, FX timing, guest counts) and explaining why it's a data quality issue. Then, for each, describe a concrete detection method such as reconciliation checks, outlier analysis, or validation rules. Emphasize how you would operationalize these checks in a data pipeline to catch issues early.

Pro tip: Tie each pitfall to a real business impact (e.g., revenue leakage, inaccurate demand forecasting) and mention that you'd validate detection logic with domain experts and A/B tests where possible.

1. Categorize and prioritize pitfalls

List each pitfall and assess its frequency and business impact to prioritize detection efforts.

2. Define expected data behavior

For each pitfall, specify what correct data should look like (e.g., room count equals sum of individual room records, cancellation amounts match booking amounts).

3. Design detection rules and metrics

Create validation rules, reconciliation checks, and anomaly detection metrics (e.g., variance thresholds, distribution shifts) for each pitfall.

4. Implement monitoring and alerting

Integrate checks into ETL pipelines with automated alerts and dashboards to flag issues in real-time or near-real-time.

5. Iterate with feedback and root cause analysis

Regularly review false positives/negatives, refine rules, and perform root cause analysis on detected anomalies to prevent recurrence.

Key Points to Mention

  • Multi-room bookings: detect by comparing aggregated room counts vs. individual room records; check for duplicate booking IDs or inconsistent room-level attributes.
  • Partial cancellations: reconcile cancellation amounts against original booking amounts; flag cases where cancellation amount is not a subset of the original or where refunds exceed expected.
  • Rebookings: identify linked bookings (e.g., same traveler, overlapping dates) and check for double-counting in revenue or demand metrics; use sequence analysis to detect rebooking patterns.
  • Cross-currency FX timing: validate that exchange rates are applied consistently at booking vs. cancellation; detect discrepancies by comparing converted amounts using historical rates and flagging outliers.
  • Adult vs. child guest counts: enforce validation rules (e.g., child count ≤ total guests, adult count ≥ 1); use distribution checks to spot implausible ratios or missing guest type fields.
  • Operationalize detection: embed checks in data pipelines, use statistical process control for anomalies, and maintain a data quality dashboard with alerting.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.