TaskRabbit’s marketplace matches clients (people who need help) with taskers (independent contractors) across categories like furniture assembly, moving, cleaning, and handyman work. The product team wants to improve the “Recommended Taskers” ranking shown on the task creation flow and search results.
Scale: TaskRabbit operates in ~100 metros, with ~2–4M monthly active clients, ~250K active taskers, and ~10–20M search/result impressions per day. A 1% relative lift in booking conversion is worth several million dollars annually, but bad recommendations can increase cancellations, refunds, and support costs.
You are asked to implement a recommendation/ranking system that, given a task request (category, time window, location, budget), returns a ranked list of taskers.
You have 6 months of logged marketplace data. Each row represents a (request, tasker impression) pair from search results.
| Feature Group | Examples | Notes |
|---|---|---|
| Request context | category, metro_id, request_lat/lon (coarsened), requested_start_time, day_of_week, budget_bucket | Some features are only known at request time |
| Tasker profile | tasker_id, skills/categories enabled, hourly_rate, years_on_platform, background_check, languages | Slowly changing |
| Tasker quality | avg_rating, rating_count, on_time_rate, cancellation_rate, completion_rate, complaint_rate | Sparse for new taskers |
| Supply/demand | taskers_available_in_radius, tasker_response_time_p50, utilization_last_7d | Computed from logs |
| Interaction history | client_tasker_past_hires, client_category_hires_90d, tasker_category_jobs_30d | Must avoid leakage |
| Label | booked (0/1), hired_tasker (0/1), cancelled (0/1) | Booked is primary |
Size: ~120M impressions, ~35M unique requests, average 30 taskers per request.
Label characteristics: