cswork / libraryOpen practice workspace

Coding questions · Capital One

Compute Customer Spend and Engineer Features for 2023

This question evaluates proficiency in SQL-based temporal aggregation and Python feature engineering on transactional datasets, including computing monthly spend summaries and engineering category-level spending features.

transactions

+-----------+-------------+--------+------------+--------------+
| tran_id   | customer_id | amount | tran_date  | merchant_cat |
+-----------+-------------+--------+------------+--------------+
| 1001      | 501         | 45.67  | 2023-01-12 | GROCERIES    |
| 1002      | 502         | 120.00 | 2023-01-13 | TRAVEL       |
| 1003      | 501         | 13.50  | 2023-01-14 | DINING       |
| 1004      | 503         | 250.00 | 2023-01-14 | ELECTRONICS  |
+-----------+-------------+--------+------------+--------------+
Scenario

Capital One Data Science Manager interview – take-home data challenge using historical credit-card transactions.

Question

Write SQL to compute each customer's total and average monthly spend for 2023. In Python, engineer features summarizing spend by merchant category and prepare a modeling dataset.

Hints

Think window functions, GROUP BY month, and pivot/one-hot in pandas.

Customer total and average monthly spend for 2023

Using the transactions table, write a SQL query to compute each customer's total spend in 2023 and their average monthly spend in 2023. The average monthly spend should be computed over the customer's monthly totals for months in 2023 that have at least one transaction.

Table transactions

columntypeconstraints
tran_idINTEGERPRIMARY KEY, NOT NULL
customer_idINTEGERNOT NULL
amountDECIMAL(10,2)NOT NULL
tran_dateDATENOT NULL
merchant_catVARCHAR(50)NOT NULL

Sample data:

amountcustomer_idmerchant_cattran_datetran_id
45.67501GROCERIES2023-01-121001
120502TRAVEL2023-01-131002
13.5501DINING2023-01-141003
250503ELECTRONICS2023-01-141004

Expected output

For each customer_id, return total spend in 2023 and average monthly spend for 2023, where the average is computed over the monthly totals for months in 2023 that have at least one transaction.

avg_monthly_spend_2023customer_idtotal_spend_2023
59.1750159.17
120502120
250503250

Hints

  1. First aggregate to monthly spend per customer using GROUP BY DATE_TRUNC('month', tran_date).
  2. Then aggregate those monthly results per customer to compute total and average monthly spend for 2023.
  3. Ensure you filter to transactions where the year of tran_date is 2023.