Skip to content
All insights AI financial modeling & automation

Generating portfolio commentary that an analyst will sign

Automated portfolio commentary works only when every sentence is tied to an attribution number. Here is how we build it so an analyst can review and sign off.

3 min read #modeling#reporting#automation
Financial services professionals working through an AI initiative

Every quarter-end, someone writes the same paragraph. The fund was up, the overweight in industrials helped, the cash drag hurt, and the manager’s view on rates is roughly unchanged. The numbers come from the attribution system; the prose comes from a person who is tired of writing it. Reporting automation is an obvious fit here, and it is also where a lot of teams get burned, because the language model is happy to write that paragraph whether or not it has the numbers to back it up.

The failure mode is specific. Ask a model to “write the portfolio commentary for Q1” and it will produce something fluent and plausible. It will say the position in a name “contributed strongly” when the position actually lost money, because “contributed strongly” is the kind of phrase that follows that kind of sentence in its training data. The text reads like commentary. It is not grounded in this portfolio’s attribution. That is the gap that has to close before any of this goes near a client.

Generate from the attribution, not from a prompt

The fix is to stop treating commentary as free text and start treating it as a view over the performance attribution output. The model does not get to invent the story. It gets a structured set of facts, computed beforehand, and its job is to phrase them.

In practice that means the pipeline runs the attribution first and pins the results. For a given period we have the return, the breakdown by sector and by security, allocation versus selection effect, the largest positive and negative contributors, and the changes in holdings since the last report. Only then does language come in, and every clause it produces has to point back to one of those values.

  • Compute performance attribution and holdings deltas before any text is generated
  • Bind each sentence to the specific figures it describes, with the numbers carried through rather than paraphrased
  • Reconcile the narrative totals against the attribution output, so contributions in the prose actually sum to the period return
  • Keep an audit trail from each statement back to the source figure and the run that produced it

The reconciliation step is the one people skip and the one that matters most. If the commentary claims three names drove the quarter, those three contributions plus the rest had better add up to the number in the performance table on the same page. When they do not, the report is wrong in a way a client will notice.

Guard against confident-but-wrong

Grounding the text in real attribution removes most of the fabrication, but not all of it. A model can still take correct numbers and draw a wrong inference: call a rounding-level move “significant”, attribute a result to a factor it cannot see, or carry forward a manager view that is no longer true. These are the dangerous errors, because they are confident and they read well.

So we constrain the inference, not just the inputs. Comparative language is tied to thresholds computed from the data rather than chosen by the model. Anything that asserts a cause, as opposed to reporting a contribution, gets flagged for a human to confirm. We build eval sets from past reports, including ones that were sent and later corrected, and score new output against them so a regression in tone or accuracy shows up before the report does. Drift here is gradual, which is exactly why you measure it.

The analyst signs, the system drafts

None of this removes the analyst. It changes what they spend time on. Instead of writing the paragraph, they review a draft that already reconciles to the attribution and carries its sources. The analyst review becomes a check on judgment and framing, with the arithmetic already settled, and the sign-off stays with the person, not the model.

That arrangement is also what makes the compliance angle workable. Anything client-facing is a regulated document, and a reviewer or examiner can ask why a statement was made. Because each sentence traces to a figure and a run, the answer is in the audit trail rather than in someone’s memory. The analyst’s sign-off is the accountable human decision the rules expect, and the lineage behind it is what lets that decision hold up later.

Reporting automation here is not about removing the writer. It is about giving the writer a draft that is already correct, and a record of why.

Working on something similar?

Tell us about your data and the workflow around it, and we will give you a straight read.

Book a 30-min intro call