Corporate Business Alliance

CBA-DAP · Technology

Specimen paper

Twelve examination items for the CBA Certified Data Analytics Professional, with the answer and a rationale for every option.

Examiner’s note

This specimen is twelve items drawn from the same bank as the live paper, in the same proportions across the six domains and with the same spread of difficulty. Expect what you see here: short business situations carrying real figures, four options that all sound defensible, and one that answers the question actually put. Several stems settle with arithmetic you can do in your head; others ask you to read a query and say what it returns rather than what its author intended. The commonest way of losing marks on this certification is not arithmetic. It is choosing an option that is true but does not dispose of the question asked, or one that reaches the right number by a mechanism that did not occur. Read the final sentence of each stem twice.

Items

12

Domains

6

Questions in the examination

80

  1. 01Preparing and Structuring DataFoundational

    Kudi Pay, a Nigerian mobile money service, stores agent codes such as 004182 and 000917. A replacement loader types that column as a whole number. An inner join of 26,400 transaction rows to the agent list then returns 24,910 rows, with no error raised anywhere. What is the most likely cause?

    • A

      Codes that carried leading zeros no longer match.

      Correct: numeric typing discards the leading zeros, so 004182 becomes 4182 and no longer matches the agent list held as text.

    • B

      Codes above the whole-number limit were truncated.

      This borrows a real failure, precision loss on identifiers too long for the type, and applies it where it cannot arise: six digits sit far inside any whole-number limit. It would be right for a 19-digit card or device number loaded into a type that cannot hold it, where the tail digits are silently rounded away.

    • C

      Codes with decimal parts rounded to a shared value.

      This assumes the codes carry a fractional part that rounding could collapse into a collision. These are whole values with nothing after the point, so there is nothing to round; you would need a float column holding values such as 4182.7 before two distinct codes could round to one another.

    • D

      Codes now sort numerically rather than as text.

      True and irrelevant, which is why it attracts candidates who spot that something about ordering did change. A join matches on equality, not on position, so sort order cannot decide whether a row finds a partner. It would matter if the report ranked or banded agents by code.

    Why that is the answer

    An identifier is a label, not a quantity, and the test is simple: if you would never add two of these values together, store them as text. Numeric typing normalises what it holds, so the leading zeros are dropped on load and 004182 stops matching the agent list. Nothing errors, because both sides now hold perfectly legal values and the join simply finds fewer of them, losing about 1,490 rows in silence. Profile the match rate on any join before you trust the row count that comes out of it.

  2. 02Statistical Foundations for AnalystsFoundational

    Kudi Express built a fraud classifier and validated it on 200,000 transfers, of which 1,200 were fraudulent. The model flagged 900 transfers and 300 of those were fraudulent. The pack leads with 99.25 per cent accuracy. What is the strongest objection to that headline?

    • A

      Flagging nothing at all scores 99.4 per cent on the same transfers.

      Correct: the do-nothing rule scores 198,800 of 200,000, so the headline is worse than a rule that needs no model at all.

    • B

      Recall is 25 per cent, so three frauds in four reach a customer's account.

      The arithmetic is right, 300 of the 1,200 frauds are caught, and the sentence is true, which is what makes it tempting. It describes how the model behaves rather than removing the headline's claim to be evidence. It would be the answer if you were asked what the model misses rather than what is wrong with the 99.25 per cent.

    • C

      Accuracy belongs on the training data, where the split can be compared.

      This inverts the discipline. Performance is quoted on data the model has not seen, and moving accuracy to the rows it learned from would raise the figure rather than test it. It would only be right if the question at issue were the gap between training and validation, which is a check for overfitting and not the claim being made here.

    • D

      Precision is 33 per cent, so two flags in three waste investigator time.

      Also correctly computed, 300 of 900 flags, and also true, so it is the most plausible wrong answer here. It prices the investigators' wasted effort, which is a real operational cost, but 33 per cent against a base rate of 0.6 per cent is a lift of over fifty and is the model's strongest feature. Choose it and you have answered a question about workload, not about the headline.

    Why that is the answer

    Where one class is rare, accuracy is mostly a measurement of how many negatives there are. At 1,200 frauds in 200,000 transfers the base rate is 0.6 per cent, so a rule that flags nothing is right 99.4 per cent of the time and beats the model on the very metric being advertised. Any accuracy figure therefore needs the majority-class baseline printed beside it before it carries information. Note also what the question asks for: three of these statements are true, and only one of them disposes of the headline.

  3. 03Analysis with Spreadsheets and SQL ConceptsFoundational

    Alpenklar Getranke, an Austrian drinks distributor, pivots litres delivered by depot. The pivot returns 41,200 in total, the delivery extract holds 41,200 rows, and litres for the period are known from the operations report to be about 3.1m. Nine rows in the litres column carry the text 'n/a'. What has happened?

    • A

      The text entries were read as zero, which pulled the total down heavily

      This assumes text is coerced into a number before aggregation. Even if it were, nine zeros among 41,200 rows would move a 3.1m litre total by a rounding error rather than down to a four-figure number. It would be right if the total came back slightly short and the shortfall matched the volumes on those nine deliveries.

    • B

      The pivot excluded the nine rows, so the total lost their volumes

      Exclusion is what a SUM does with text, so this is the near miss worth holding in mind. The loss would be the volume of nine deliveries, leaving a total still in the millions of litres, so it explains a discrepancy of entirely the wrong size. Judge any candidate cause by magnitude before you accept it.

    • C

      The depot field was placed in values, so it counted depots per row

      A field dropped into the wrong well is a genuine way to produce a nonsense pivot, and this one would report depot counts. It does not return the extract's row count, and it does not explain why a fault in the litres column is implicated at all.

    • D

      The text entries switched the value field to count, so it counts rows

      Correct: a value field containing any text defaults to count, so 41,200 is the number of delivery rows and not a volume in litres.

    Why that is the answer

    A pivot picks its own aggregation when the value field is not uniformly numeric, and the fallback is count. That is what makes this fault dangerous: 41,200 is a plausible number of deliveries, so it reads as a figure rather than as an error, while the answer should be near 3.1m litres. Two habits catch it in seconds. Read the aggregation label on the value field, and reconcile every total to a figure obtained independently of the tool that produced it.

  4. 04Visualisation and DashboardsFoundational

    Vela Movilidad, a Spanish car hire firm, runs 40 depots. Fleet utilisation clusters at two levels: airport depots sit near 82 per cent and city depots near 51 per cent, with very few depots between them, and the fleet average is 66 per cent. The operations director wants the board to see this pattern. Which form shows it?

    • A

      A box plot of depot utilisation with quartiles marked

      Defensible at a glance, since a box plot is a distribution chart, and it is the strongest wrong answer here. It draws five summary numbers, and those numbers are much the same whether the depots sit in two clumps or spread evenly, so the gap in the middle is exactly what it hides. It earns its place when you are comparing spread across many groups, not when the shape inside one group is the finding.

    • B

      A histogram of depot utilisation with stated bin edges

      Correct: a histogram shows the distribution itself, so the two clusters and the sparse middle are visible, and stated bin edges show the gap is not an artefact of binning.

    • C

      A single tile giving mean depot utilisation of 66 per cent

      This is the fault being reported rather than a remedy for it. A mean taken over a two-peaked distribution lands in the trough, so 66 per cent describes almost no depot in the network. It would be a reasonable tile only if utilisation clustered around a single centre, which the stem rules out.

    • D

      A scatter of depot utilisation against depot fleet size

      A scatter answers a relationship question, whether utilisation moves with the size of a depot, and that may well be worth asking later. It is chosen by candidates who reach for the richest chart rather than the one matching the question, which here is about shape and not about association.

    Why that is the answer

    Choose the form from the question, and the question here is about shape: do the depots form one group or two? A histogram plots the distribution itself, so both clusters and the empty middle are on the page, and stating the bin edges lets the reader see that the gap is in the data rather than in the binning. Any form that reduces 40 depots to a handful of summary numbers, whether a mean or a set of quartiles, must conceal that structure, because those numbers barely move between a one-peaked distribution and a two-peaked one.

  5. 05Preparing and Structuring DataStandard

    Nordvarme, a Danish district heating supplier, holds `contracts` at one row per customer per tariff version with half-open validity dates. An analyst runs the query below and reports 41,900 customers. SELECT COUNT(*) AS customers FROM contracts WHERE valid_from <= DATE '2026-05-31' AND (valid_to IS NULL OR valid_to > DATE '2026-05-01'); What does the figure actually count?

    • A

      Customers with a contract on 31 May.

      This is the reading the analyst published, taking the column alias as a description of the grain. It also treats a period overlap as a snapshot, when the predicate happily admits a version that closed on 2 May. It would be right only with COUNT(DISTINCT customer_id) and both ends of the test anchored to 31 May.

    • B

      Customers who changed tariff in May.

      This reads the predicate as though it selected change events. Nothing here tests whether a version began or ended inside the month; the two comparisons ask only whether the validity interval touches May at all. Isolating switchers needs valid_from and valid_to both falling inside the month, or a count of customers holding more than one row.

    • C

      Tariff versions valid in May.

      Correct: the grain is one row per tariff version and the predicate is an overlap test, so every version live at any point in May is counted once.

    • D

      Tariff versions that started in May.

      Right about the grain, which is the harder half of the question, and wrong about the filter, which is why it collects candidates who are most of the way there. valid_from <= 31 May is satisfied by a version opened years ago, so long-standing contracts are all included. A started-in-May test needs a lower bound of 1 May on valid_from.

    Why that is the answer

    Ask what one row of a table means before you count it. The grain here is one row per customer per tariff version, so COUNT(*) returns versions, and a customer who switched tariff mid-month contributes two of them. The predicate compounds this by testing an overlap, valid_from before the end of the month and valid_to after the start, so it admits anything live at any point in May rather than on a single date. The alias on the column records the analyst's intention, not the query's behaviour: a customer figure needs COUNT(DISTINCT customer_id), and a point-in-time figure needs both bounds anchored to the same date.

  6. 06Analysis with Spreadsheets and SQL ConceptsStandard

    Cloncairn Veterinary Group has 1,500 registered farms. In the year to June 2026, 1,200 farms booked at least one visit, 300 booked none, and 9,600 visits were made. An analyst runs: SELECT f.farm_id, COUNT(v.visit_id) AS visits FROM farms f LEFT JOIN visits v ON v.farm_id = f.farm_id WHERE v.booked_on >= '2025-07-01' GROUP BY f.farm_id; and reports 8.0 visits per farm. What should be reported, and why?

    • A

      6.4: the WHERE test on a NULL date removed the 300 farms without visits

      Correct: the null-extended rows fail the date comparison and are discarded, so the denominator should be all 1,500 farms and the answer 6.4.

    • B

      8.0: farms that booked nothing have no rows and no place in the mean

      This defends a real measure, visits per visiting farm, and gives it the wrong name. The question asked for visits per registered farm, and answering with a survivors-only denominator is how a report comes to overstate activity by a quarter. It would be right if the 300 quiet farms had been excluded deliberately and the label said so.

    • C

      6.4: the join duplicated farms, so a distinct farm list must be used first

      The number is right and the mechanism never happened, which makes this the most attractive wrong answer. Fan-out is a common cause of broken denominators, so the reflex is sound in general, but here the join loses rows rather than multiplying them and a distinct farm list changes nothing. Choose it and you apply a fix that leaves the 300 farms missing.

    • D

      8.0: COUNT of the visit identifier skips rows whose visit date is missing

      This confuses what COUNT does inside a surviving row with which rows survive at all. COUNT(v.visit_id) does ignore NULLs, and that behaviour is wanted: it returns 0 for a preserved farm. Those rows never reach the count, because the WHERE clause has already removed them.

    Why that is the answer

    A LEFT JOIN preserves unmatched left rows by filling the right-hand columns with NULL, and any WHERE test against one of those NULL columns evaluates to unknown, which is discarded exactly as false would be. The 300 visit-free farms are therefore removed after the join, leaving an inner join written in outer-join syntax. What makes this dangerous is that the damage shows up in a denominator rather than in an error message: 9,600 over 1,200 is 8.0, where the question asked for 9,600 over 1,500, which is 6.4. Filters on the right-hand table belong in the ON clause; keep WHERE for tests on the preserved side.

  7. 07Statistical Foundations for AnalystsStandard

    Maple Ridge Grocers wants to know what keeps loyalty members subscribed. An analyst pulls the current active member table, finds that 82 per cent of them shop weekly, and concludes that weekly shopping drives retention. What is the flaw?

    • A

      Weekly shopping covers a window shorter than the retention year.

      A fair caveat about how the behaviour is measured, and worth settling in the definition. It affects the precision of the 82 per cent rather than its meaning, and a perfectly aligned window over the same table would still contain nobody who left.

    • B

      Shopping frequency is held per household, not per individual member.

      Another real grain issue, and one that would matter if the count of members were the thing in dispute. Correcting the unit leaves the missing comparison group untouched, so you would have fixed a second-order problem while the first-order one stands.

    • C

      Everyone who cancelled is absent from the table that was analysed.

      Correct: the current table holds only survivors, so the analysis describes who stayed and then presents that as the reason they stayed.

    • D

      The 82 per cent has no comparison against non-member shoppers.

      This spots that a comparison is missing, which is half the insight, then names the wrong one. Shoppers who never joined cannot cancel, so they carry no information about retention. The comparison required is members who left against members who stayed, both drawn from the same starting population.

    Why that is the answer

    The question is why members stay, so the population that answers it has to contain both those who stayed and those who left. Querying the current member table samples on the outcome being explained, which means every behaviour common in that table looks like a cause of survival. It may well be that 82 per cent of the members who cancelled also shopped weekly, and this frame can never tell you. Reconstruct the base as at the start of an observation window, keep the members who subsequently cancelled, and compare the two groups.

  8. 08Introduction to Predictive MethodsStandard

    Brookline Foods scores 12,000 loyalty accounts for lapse. The top band holds 400 accounts with a mean predicted rate of 45%, of which 19% actually lapsed; the next band holds 1,200 accounts at 22% predicted and 6% actual; the bands separate cleanly in that order. Finance is planning on 180 lapses in the top band. What should finance be told?

    • A

      The ranking holds and the scores are risks; plan on 180 and review later.

      This reads a score as a probability, which is the assumption the observed rates contradict. Planning on 180 where 76 will lapse overstates the exposure by more than double, and every business case built on it inherits the error. It would be right only if predicted and observed rates agreed in each band, which is what calibration means.

    • B

      The scores are unusable; withdraw the model until the ordering is fixed.

      This treats one defect as total failure and discards the property that earns money: a top band lapsing at 19 per cent against a much lower base rate is a workable call list. Withdrawal would be the right call if the bands failed to separate, since a model that cannot rank has nothing left to offer.

    • C

      The ranking holds; plan on the observed 19%, which is 76 accounts.

      Correct: use the ordering to choose whom to work, and use the observed rate for any number that enters a plan.

    • D

      Halve every score before publishing, which brings the top band near 22%.

      Tempting because it makes two numbers agree in one band, and it is a fudge rather than a calibration. Nothing shows the same factor applies to the lower bands, and the adjustment has no rule for updating as new outcomes arrive. A genuine recalibration maps scores to observed rates across every band and is refitted against outcomes.

    Why that is the answer

    Ranking and calibration are separate properties of a model and have to be checked separately. These bands order the base correctly, 19 per cent above 6 per cent, so the scores are fit for deciding whom to contact; they run two to three times above the outcomes, so they are not fit to be read as probabilities. Any figure that goes into a plan, a forecast or a business case must come from observed lapses in the band, which is 19 per cent of 400, or 76 accounts. Keep the ordering, quote the observed rate, and check calibration again as each month closes.

  9. 09Communicating InsightStandard

    At Southern Cross Mutual, an Australian insurer, an analyst tells the head of retention operations that AUD 2.9m of premium is at risk from lapse this year. That manager controls which policyholders are contacted and when. The response is: so what. How should the analyst classify the challenge, and what is the fix?

    • A

      A relevance challenge: restate it as the accounts her team can call monthly

      Correct: "so what" signals that the work has not reached the audience's lever, and the fix is to restate the same finding as the call list she can act on.

    • B

      A definition challenge: state the lapse rule used and whether it is decisive

      This is the right response to a challenge about what the number counts, such as which policies are treated as lapsed and on what date. Nobody disputed the lapse rule here, so you would spend the meeting defending a definition that was never in question and still leave without a decision.

    • C

      A motivated challenge: separate the number from the recommendation and hold it

      A motivated challenge attacks the data as a proxy for a decision the challenger dislikes, and separating the two is the correct answer to it. Reading a legitimate "so what" that way imputes bad faith to a manager who is telling you plainly that the work does not reach her levers, and it costs you the relationship as well as the decision.

    • D

      An arithmetic challenge: produce the derivation of the AUD 2.9m before defending

      Producing a derivation answers a challenge to the calculation, and the calculation was never attacked. You would confirm a number the audience already accepts and cannot use, while the room waits for something it can act on.

    Why that is the answer

    "So what" is a challenge to relevance rather than to the number, and nothing in the room disputes the AUD 2.9m. The analysis has been delivered in a currency the audience cannot spend: this manager's lever is who gets called and when, and a premium-at-risk total names no policyholders. The remedy is to restate the identical analysis against that lever, as a monthly list of accounts to contact with the value sitting behind each one. Classify a challenge before you answer it, because relevance, definition, arithmetic and motivated challenges each take a different response and answering the wrong one loses the room.

  10. 10Introduction to Predictive MethodsStandard

    Zumaria Pay predicts agent dormancy for June. Features are built on 6 June, when the load finishes, using: SELECT agent_id, SUM(amount) AS volume_30d FROM transactions WHERE txn_date >= DATE '2026-05-07' AND txn_date <= DATE '2026-06-06' GROUP BY agent_id; Which defect will most inflate the model's development figures?

    • A

      The window spans 31 days, so each agent's volume is slightly overstated.

      A precise observation that is not a defect worth naming: the inclusive bounds do cover 31 days. The extra day applies to every agent alike, so it shifts the level of a feature rather than leaking anything, and rescaling to 30 days would leave the metrics exactly where they are.

    • B

      The GROUP BY drops agents with no transactions, thinning the population.

      A genuine coverage fault, and the strongest of the wrong answers: an agent with no transactions has no row, so the scored population is both smaller and biased, and a left join with a zero default is needed. It depresses live usefulness rather than inflating development figures, which is what the question asks for.

    • C

      The window reaches six days into June, the month being predicted.

      Correct: outcome-period behaviour enters the features, so the development figures are flattered by information no live prediction could have.

    • D

      The window is the same for every agent, so tenure is not accounted for.

      This asks for a per-agent window scaled to how long the agent has traded, which is a modelling preference rather than an error, and tenure is better carried as its own feature. It is chosen by candidates scanning the query for anything uneven instead of asking which fault could raise a score.

    Why that is the answer

    A feature has to be knowable at the moment of prediction and must carry nothing from the period whose outcome is being predicted. This window closes on 6 June only because that is when the load happens to finish, so six days of June sit inside a feature used to predict June dormancy, and an agent who has already gone quiet carries the very silence the model is supposed to anticipate. Development figures will look excellent and live performance will not resemble them. Set feature windows by a stated cut-off before the prediction period, never by the convenience of the load schedule.

  11. 11Statistical Foundations for AnalystsDemanding

    Hondje Direct converts 10 per cent of its free trials to paid subscriptions and would act on a rise to 12 per cent. It starts 400 trials a month. Using n per arm = 16 x p x (1 - p) / d squared, the analyst sizes the test, runs it for two months and reports no significant difference. What should the report say?

    • A

      3,600 per arm: the 400 collected cannot detect a 2 point rise.

      Correct: the requirement is 3,600 in each arm, so 400 leaves the test unable to detect the effect the business would act on.

    • B

      3,600 per arm: the null result shows the flow adds under 2 points.

      The sizing is right and the conclusion is the classic inversion, treating absence of evidence as evidence of absence. An underpowered test fails to reject whether or not an effect exists. This reading would be legitimate only from a test that had the sample to detect two points and did not find them, ideally with an interval that excluded that value.

    • C

      225 per arm: the 400 collected pass the requirement comfortably.

      This is the formula with the factor of 16 dropped, leaving p(1 - p) over d squared, and it makes the collected sample look ample. Treat any answer implying that a fortnight of data settles a two point question about a 10 per cent rate as suspect, and go back to the constant.

    • D

      1,800 per arm: seven further months would complete the test.

      This halves the requirement by reading 3,600 as the total across both arms rather than the size of each. The formula returns a per-arm figure, and the error understates the run length as well, which is the form in which it usually reaches a plan and gets approved.

    Why that is the answer

    Sizing comes before the test, and the size follows from the smallest effect worth acting on. With p = 0.10 and d = 0.02, 16 x 0.10 x 0.90 / 0.0004 gives 3,600 trials per arm, so 7,200 trials at 400 a month is eighteen months of collection. Two months yields roughly 400 per arm, about a ninth of what is required, and a test that small could not have detected a two point rise even had one been there. The honest report says the test found nothing, which is not the same as finding no effect, and states the sample the question needs.

  12. 12Visualisation and DashboardsDemanding

    A German logistics operator reports blended monthly customer churn of 2.0%. By segment it is 5.0% for micro shippers, 2.5% for mid-sized and 1.0% for large accounts. Twelve-month survival is 54%, 74% and 89% by segment, and 78% at the blended rate. A December cohort of 800 accounts splits 480 micro, 200 mid and 120 large. Planning forecasts the cohort with the blended curve. What does that do?

    • A

      It overstates twelve-month survivors by about 110, given the micro-heavy mix.

      Correct: segment-by-segment the cohort yields about 514 survivors against 624 from the blended curve, an overstatement of roughly 110 accounts.

    • B

      It is sound at 624 survivors, since 2.0% is the rate the whole base runs at.

      This treats a base-wide average as a property that transfers to any group drawn from the base. It would hold only if the cohort shared the mix of the base, which is the condition every blended rate quietly assumes and this cohort, at 60 per cent micro, plainly breaks.

    • C

      The three segment rates average 2.8%, so the cohort should be modelled at that.

      This averages three rates without their weights, giving 480 micro shippers the same standing as 120 large accounts, and it is the strongest wrong answer because it does at least abandon the blend. Averaging averages requires the denominators behind each one, and once you hold those you may as well apply each rate to its own accounts.

    • D

      It understates survivors, since December accounts renew on annual dates later.

      This invents a mechanism the figures do not contain and points in the wrong direction as well. Renewal timing could matter if survival were tied to contract anniversaries, but nothing in the stem says it is, and the mix effect being ignored works against survivors rather than for them.

    Why that is the answer

    A blended rate is a weighted average whose weights are the mix of the base it was computed on, so it is a property of that base and not of any group you pick out of it. This cohort is 60 per cent micro shippers, where the installed base is far less micro-heavy, so it will lose accounts faster than the blend implies. Apply each segment's own curve to its own accounts: 480 x 0.54 plus 200 x 0.74 plus 120 x 0.89 gives about 514, against 624 from the blended 78 per cent. Whenever a headline rate is carried on to a subgroup, check the mix first, and where it differs the blend is the wrong instrument.

About these items

These twelve items are written to the specification of the live CBA-DAP paper, and none of them will appear on one. Every item in the bank is reviewed by a named subject-matter expert and audited for answer cueing domain by domain.