ThinkerMetrics
v1.0 · 25 slides
AI + Data, without the bluff

AI-Powered
Data Analysis

The Honest Insights Playbook
> Stop accepting confident answers with invented numbers._
CSV
★ Cited
✓ Verified
⚐ Honest
Why now
2026 · the threshold has been crossed

AI just became competent enough to actually analyze your data.

The gimmick era is over. Modern models can read thousands of rows, admit what they don't know, and cite their work - when you ask correctly. The watchouts are real. They are also solvable. This deck is how.

01

The context grew up.

Modern context windows ingest 10k+ rows in a single pass. The "AI can only handle toy data" excuse is dead.

10k+rows per pass
02

Refusal is built in.

Today's models will say "Not answerable from the data" when you give them permission. That single sentence kills the worst kind of hallucination.

"I don't know"is a normal answer
03

Citations on demand.

Ask for source rows and the formula, you get them. Every claim becomes auditable. The work becomes defensible.

100%claims cite source rows
The problem

Your AI is lying to you. Politely.

Ask any model to "analyze this data" and you'll get a polished summary. Some of the numbers in it never existed. Models bluff fluently when they don't have permission to say "I don't know."

⚠ Vague prompt → confident filler

"Analyze this data and tell me what you find."

The data shows strong performance with notable variation across categories, though some segments demonstrated mixed results worth investigating.
Zero citations. Zero numbers. 100% deniable.
✓ Strict prompt → cited claim

"Ground in the file. Cite rows. Allow 'I don't know.'"

Group A outperformed Group B by 2.3x on the primary metric across 47 records (rows 12–58), March 1 – April 28.
Specific. Auditable. Defendable in a board meeting.
Operating principles
01 · 02 · 03

Every prompt in this deck follows three rules.

Rule 01 / 03

Ground in the data.

Only use values from the file. No invented rows, dates, or numbers. Ever.

// In the prompt
"Use ONLY values that appear in the uploaded file. Never invent rows, dates, names, or numbers."
Rule 02 / 03

Allow "I don't know."

"Not answerable from the data" is a valid answer. Without permission to refuse, models invent.

// In the prompt
"If a question cannot be answered from the file, reply 'Not answerable from the data.' Do not estimate."
Rule 03 / 03

Cite the work.

Every claim names its source rows, column, and the formula or aggregation used.

// In the prompt
"When you state any number, cite the source: row indices used, column name, formula or aggregation."
The workflow

Four prompts. In order. No skipping.

1
Schema check

Verify what's in the file.

Force the model to inspect the data before answering anything.

2
Analyze

Find patterns, with citations.

Claim · Evidence · Calculation · Confidence. Every finding.

3
Visualize

Spec publication-ready charts.

Build charts yourself. AI-rendered charts hallucinate axes.

4
Insight brief

Turn charts into recommendations.

Insight · Why · Citation · Next step. Decision-ready.

1 Step 1 / Schema Check

Make the AI prove it actually read the file.

Most hallucinations happen because the model bluffs about data it never inspected. Force it to load the file and describe what's there before any analytical question.

// Why this works If the model can't tell you the column names, row count, and data types, every number it gives you next is a guess.
// SCHEMA REPORT - 1,284 rows
order_idinteger0 missing
datedate0 missing
customer_idinteger14 missing
channelcategorical0 missing
revenue_usdfloat0 missing
discount_pctfloat87 missing
regiontext0 missing
1 Step 1 Prompt
paste this first

Schema check - make the model describe the file before any analysis.

prompts / 01_schema_check.txt
You are a careful data analyst. I am uploading a CSV file. Before any analysis, do the following and stop.

STRICT RULES (apply to every response in this thread):
1. Use ONLY values that appear in the uploaded file. Never invent rows, dates, names, or numbers.
2. If a question cannot be answered from the file, reply "Not answerable from the data" and explain what is missing. Do not estimate.
3. When you state any number, cite the source: row indices used, column name, and the formula or aggregation.
4. When uncertain, say "uncertain" and explain why. Do not round into false precision.
5. Never extrapolate beyond the date range in the file.

TASK:
A. List every column name exactly as it appears, with the inferred data type (date, integer, float, text, categorical).
B. Report the row count, date range (min and max date), and the number of missing values per column.
C. Flag any data quality issues: duplicate rows, mixed timezones, inconsistent text casing, suspicious zero values, columns where the type is mixed.
D. Show the first 3 rows verbatim so I can confirm the load looks right.

Do NOT analyze yet. After you finish A through D, wait for my next prompt.
2 Step 2 / Analyze

Force every finding into Claim · Evidence · Calculation · Confidence.

The four-part structure makes hallucinations visible. If the Calculation line is missing or vague, the claim is suspect - send it back.

// Why this works Structure is enforcement. A field labeled "Calculation" can't be filled with adjectives.
// FINDING TEMPLATE
Claim
Evidence
Calculation
Confidence
2 Step 2 Prompt
patterns + rankings + self-check

Analyze - every finding cited, every headline recomputed.

prompts / 02_analyze.txt
Continuing from the same file. Same strict rules apply: ground every answer in the data, cite source rows, say "Not answerable from the data" when it isn't there. Do not extrapolate beyond the date range.

TASK: Find time-based patterns AND rank categories, in one pass.

Before you begin, restate two things back to me:
- PRIMARY METRIC: the column you will treat as the headline number.
- GROUPING COLUMN: the column you will rank by.
If either is ambiguous, ask. Do not assume.

OUTPUT FORMAT - use this structure for every finding:
- Claim: one sentence, specific
- Evidence: rows used (e.g. rows 12 to 18), column, aggregation
- Calculation: the actual math (e.g. "sum of [primary metric] rows 12-18 = 4,210; prior period = 1,450; change = +190%")
- Confidence: high / medium / low, and why

PART A - TIME PATTERNS
1. Highest period for the primary metric (which week or day, exact total, what records drove it)
2. Lowest period
3. Largest period-over-period percentage change, both up and down
4. Any sustained trend (3+ consecutive periods moving in the same direction)
5. Any anomaly that breaks the trend, with a one-line cause hypothesis (label it HYPOTHESIS)
PART B - CATEGORY RANKING
First, list the categories present in the grouping column. Use only values that appear in the data. If there is no clean grouping column, infer one ONLY when you can state the rule explicitly. State the rule. If you cannot infer categories, stop and say so.

Then rank by:
- Mean of the primary metric per record
- Median of the primary metric per record
- Sample size (n=) per category. Flag any category with n < 5 as low-confidence.

For the top category vs the bottom category, give:
- Concrete ratio (e.g. "Category A averaged 2.3x Category B on the primary metric")
- One example record from each (cite row index)
- Two specific observable differences between the two example records

PART C - SELF-CONSISTENCY CHECK
Recompute the headline number from Part B a second way (if you used mean, also try total of the primary metric per category divided by total records per category). If the two methods disagree, report both and explain.

PART D - GAPS
List 3 things you cannot determine from this data alone and what additional data would resolve them.

Do not use vague qualifiers like "strong," "mixed," "notable," "performing well." Every finding needs a specific number.
3 Step 3 / Visualize

Ask for chart specs, not chart images.

AI-rendered charts hallucinate axis labels and invent data points. Specs you build yourself in Tableau, Excel, or Looker don't lie.

// Why this works A spec is a contract. You can audit it. A rendered PNG is a guess wearing makeup.
AI-rendered chart
?ategor?2.??xm??r-Ap?
Spec you build
Category A2.3xMar–Apr
3 Step 3 Prompt
publication-ready specs

Visualize - specs, not images. Title states the finding.

prompts / 03_visualize.txt
Continuing from the same file. Same strict rules.

TASK: Generate publication-ready chart specifications I can build in Tableau, Excel, or Looker. I want specs, not code, unless I ask.

For each of the 3 charts below, output:
1. Chart type (bar, line, scatter, area, etc.) and why this type
2. X axis: column name, label text, tick format
3. Y axis: column name, label text, tick format, whether to include zero
4. Series / color encoding (and the exact color hex codes if you suggest a palette)
5. Title (specific, not generic - include the actual finding, e.g. "Category A delivered 2.3x the primary metric vs Category B, Mar–Apr")
6. Subtitle that gives context (sample size, date range, source)
7. The 1–2 annotations you would add (with exact data point coordinates)
8. The single number that should be the visual focal point

CHARTS:
1. Primary metric over time, with the highest and lowest periods annotated
2. Category performance comparison (use the rankings from the prior step)
3. ONE more chart you choose, based on what you found. Justify the pick in one sentence.

CONSTRAINTS:
- Do not suggest a pie chart unless there are exactly 2 or 3 categories
- Do not stack multiple metrics on one axis
- Every chart needs a clear "so what" in its title
- Cite the rows / aggregation used for each chart so I can rebuild it
4 Step 4 / Insight Brief

Turn each chart into a four-part insight a decision-maker can act on.

The structure forces the AI past surface-level filler into something with a business goal and a concrete next step.

// Why this works "Next Steps" is the section that filters insight from observation. If you can't write a concrete action, the finding isn't ready.
1
The insight Specific number. One sentence.
2
Why it matters Tied to a business goal.
3
Data connection Sample size, date range, source rows.
4
Next steps A concrete action you can run on Monday.
4 Step 4 Prompt
the insight brief

Brief - insight, business goal, citation, next step. Four parts. No padding.

prompts / 04_insight_brief.txt
For each visualization I describe below, write a four-part insight brief. Same strict rules: ground every claim in the data, cite rows, say "Not answerable from the data" when needed.

OUTPUT FORMAT (exactly this, for each chart):

1. THE INSIGHT (one sentence, specific number)
  - Bad: "Category A performed well."
  - Good: "Category A outperformed Category B by 2.3x on the primary metric across 47 records in March–April."

2. WHY IT MATTERS (one sentence connecting to a business goal)
  - Tie it to acquisition, retention, revenue, margin, awareness, or efficiency.
  - If you cannot tie it to a goal, say so.

3. DATA CONNECTION (cite the numbers)
  - Sample size, time range, the calculation, the source rows.
  - If the sample size is small (n < 30), flag it.

4. NEXT STEPS (one concrete action)
  - Bad: "Invest more in Category A."
  - Good: "Run a 4-week test allocating 50% of budget to Category A and 50% to Category B on matched audiences, measure the primary metric, target a 1.5x lift to declare significance."

Charts to write briefs for:
1. [PASTE CHART 1 DESCRIPTION + KEY NUMBERS]
2. [PASTE CHART 2 DESCRIPTION + KEY NUMBERS]
3. [PASTE CHART 3 DESCRIPTION + KEY NUMBERS]

Do not pad. If a section cannot be filled honestly, write "Cannot answer from this data" and move on.
Anti-hallucination tactics · part 1 of 2

Eight tactics that keep models honest.

01 / 08

Demand citations.

Every number must come with source rows and the formula. No cite, no trust.

02 / 08

Allow "I don't know."

Give the model permission to refuse. Without it, models invent.

03 / 08

Self-consistency check.

Have the model recompute the headline a second way. Disagreement is a flag.

04 / 08

Schema first.

Make the model describe the file before asking analytical questions.

Anti-hallucination tactics · part 2 of 2

…four more that take ten minutes each.

05 / 08

Cross-model audit.

Run the same finding through a second AI. Disagreements between models are signal.

06 / 08

Reject vague language.

"Performance was mixed" gets sent back. Demand a number or a deletion.

07 / 08

Cap the date range.

Add "do not extrapolate beyond the data" to every prompt. Every time.

08 / 08

Beware confident wrongness.

A polished claim with no citations is the most dangerous output. Verify one headline by hand before citing anywhere.

The secret weapon
audit prompt · paste another model's output below

Run the same finding through a second AI. Label every claim.

Verified
Recomputed and got the same number. Show your work.
Disagrees
Recomputed and got a different number. Show both.
Uncheckable
Claim too vague, or data isn't in the file.
prompts / 05_cross_tool_audit.txt
I just ran the analysis below in another AI tool. Audit it against the same data file (which I am uploading here).

STRICT RULES:
1. Use ONLY values from the data file. Never trust the other tool's numbers without verification.
2. For every claim, label it:
  - VERIFIED: I recomputed and got the same number. Show your calculation.
  - DISAGREES: I recomputed and got a different number. Show both.
  - UNCHECKABLE: The claim is too vague to verify, or the data isn't in the file.
TASK:
A. Audit each numerical claim using the labels above.
B. List any claim the other tool made that you would not make from this data, and why.
C. List any insight in the data that the other tool missed.
D. Final verdict: which findings are reliable, which need more data, which to discard.

Pasted output from the other tool:
"""
[PASTE THE FIRST TOOL'S OUTPUT HERE]
"""

Be blunt. If the other tool hallucinated, call it out by row.
Your toolkit

No single AI wins every step. Pair them.

careful reasoner
Claude

Best at careful reasoning, citations, and refusing when uncertain. Use for schema checks and analysis where admitting "I don't know" matters.

SchemaAnalyze
code generator
ChatGPT

Best at code generation and fast iteration. Use for generated Python or R, pivot-table breakdowns, ad-hoc transforms.

CodePivots
sheets-native
Gemini

Free, integrates with Google Sheets. Use when the data already lives in Sheets and you don't want to export.

SheetsQuick
python notebook
Julius.ai

Runs Python under the hood and returns plots inline. Use for quick exploratory charts when you want to look, not export.

ExplorePlots
web grounding
Perplexity

Live web search with sources. Use to benchmark your numbers against industry data - not to analyze the file itself.

BenchmarksSources
Pre-ship checklist · eight gates

Before you put a number in a deck, run the checklist.

01
Schema check ran first.
02
Every headline number has cited source rows.
03
At least one headline number recomputed by hand.
04
Cross-tool audit completed.
05
Chart titles state findings, not topics.
06
Every insight tied to a business goal.
07
Any sample size under 30 is flagged.
08
Every "strong," "mixed," "notable" is stripped.
Part 02 · In the wild
five roles · five accent colors · same four prompts
// PART 2

In the Wild.

How five roles plug the playbook into their own data. Different metric column. Different categories. Different stakes.

01

Marketing Campaign Manager

Meta Ads · Email
02

Social Media Manager

YouTube · TikTok
03

Product / App Analyst

Mixpanel · Amplitude
04

SaaS Growth Analyst

Stripe · HubSpot
05

Consultant / Financial Analyst

P&L · Board decks
01 Role

Marketing Campaign Manager

Instagram / Meta paid social + ConvertKit email
// Plug these into the prompt
Data sources Meta Ads Manager export · ConvertKit campaign export · Google Sheets pivots
Primary metric ROAS, CPA, CTR, conversion rate. For email: open rate, click rate, unsubscribe rate.
Grouping column Ad creative (image, video, carousel), audience segment, placement, subject-line variant.
Time grain Daily for paid · per-send for email.
// What good looks like
Claim Video creatives delivered 1.8x lower CPA than static across $24,140 spend, April 1–28.
Evidence Rows 12–186, ad_format column, CPA = spend / conversions per row.
Calculation Video CPA = $5,200 / 412 = $12.62. Static CPA = $18,940 / 834 = $22.71. Ratio = 1.80.
Confidence High. n=412 video conversions, n=834 static. Same audience, same dates.
// Bar · Step 3 spec y: CPA ($)  ·  x: ad format
Video CPA 1.8x lower than static, April 1-28
$25 $13 $0 $12.62 $22.71 VIDEO n = 412 conv STATIC n = 834 conv 1.8x ↓ CPA
Focal: 1.8x Annotated: April 1-28, rows 12-186
02 Role

Social Media Manager

YouTube Studio + TikTok Creator analytics · video first
// Plug these into the prompt
Data sources YouTube Studio CSV export · TikTok Creator analytics export · Vidooly / TubeBuddy exports
Primary metric Avg view duration, retention %, CTR on thumbnail, shares, follower delta.
Grouping column Video format (Short, long-form, tutorial, reaction), thumbnail style, hook type (question, bold claim, stat).
Time grain Per-video · weekly rollup for trend.
// What good looks like
Claim TikToks with a hook under 3 seconds held 67% retention vs 41% for slower openers, last 30 days.
Evidence Rows 4–89, hook_seconds (computed from caption start), retention_pct column.
Calculation Mean retention for hook < 3s (n=42) = 0.674. Mean for hook ≥ 3s (n=44) = 0.412.
Confidence High. n=86 videos across 30 days, same posting cadence.
// Bar · Step 3 spec y: avg retention %  ·  x: hook duration
Hooks under 3s held +26pts more retention, last 30 days
70% 35% 0% 67% 41% HOOK < 3s n = 42 videos HOOK ≥ 3s n = 44 videos +26 PTS
Focal: 67% vs 41% Flag: report median too (viral outliers)
03 Role

Product / App Analyst

Mixpanel · Amplitude · Heap · in-house event data
// Plug these into the prompt
Data sources Event export (CSV or SQL dump) · Mixpanel / Amplitude / Heap / Pendo · cohort tables · funnel exports.
Primary metric DAU/MAU, day-7 / day-30 retention, activation rate, funnel conversion, feature adoption %.
Grouping column Signup cohort week, platform (iOS, Android, web), feature flag or A/B variant (Optimizely, Adobe Target), user persona.
Time grain Cohort week for retention · daily for engagement.
// What good looks like
Claim Day-7 retention dropped from 42% to 31% for the cohort that signed up the week of March 3.
Evidence Rows 78–104, cohort_week column, retained_d7 / cohort_size.
Calculation Feb 24 cohort: 1,840 / 4,381 = 42.0%. Mar 3 cohort: 1,289 / 4,158 = 31.0%. Delta = -11 pts.
Confidence Medium. Drop coincides with onboarding redesign ship date 3/2. HYPOTHESIS: redesign regressed activation. Confirm with funnel breakdown.
// Line · Step 3 spec y: day-7 retention %  ·  x: signup cohort week
Day-7 retention fell 11pts on the Mar 3 cohort
50% 35% 20% -11 PTS onboarding ship 3/2 FEB 10 FEB 17 FEB 24 MAR 3 MAR 10 cohort signup week
Focal: 42% → 31% Next: funnel breakdown by activation step
04 Role

SaaS Growth Analyst

Stripe · HubSpot · product analytics · billing exports
// Plug these into the prompt
Data sources Stripe revenue export · HubSpot pipeline CSV · ProfitWell · Stripe Sigma · product analytics for expansion signals.
Primary metric MRR, ARR, NRR, gross churn %, LTV:CAC, trial-to-paid conversion, expansion revenue.
Grouping column Plan tier, acquisition channel, cohort month, company size band.
Time grain Monthly for revenue · weekly for trial conversion.
// What good looks like
Claim Self-serve trials converted at 14.2% vs 22.1% for sales-assisted in Q1 - but at 1/8th the CAC.
Evidence Rows 211–498, acquisition_channel, converted_flag, cac_cents.
Calculation Self-serve: 1,142 / 8,042 = 14.2%, mean CAC = $47. Sales-assisted: 218 / 986 = 22.1%, mean CAC = $384. CAC ratio = 8.17.
Confidence High. n=9,028 trials, full quarter.
// Grouped bar · Step 3 spec conversion %  |  CAC ($) per channel
Self-serve: lower conversion, 1/8th the CAC
CONVERSION RATE 25% 12% 0% 14.2% 22.1% SELF-SERVE n = 8,042 SALES n = 986 CAC PER TRIAL $400 $200 $0 $47 $384 SELF-SERVE SALES 8x ↑
Focal: 8x CAC ratio Constraint: exclude cohorts < trial length
05 Role

Consultant / Financial Analyst

Client P&Ls · segment revenue · board-deck inputs
// Plug these into the prompt
Data sources P&L exports · segment revenue files · GL extracts · market-sizing inputs.
Primary metric Revenue growth %, gross margin %, contribution margin, EBITDA, burn rate, runway months.
Grouping column Business unit, product line, customer segment, region, sales rep.
Time grain Monthly close · with QoQ and YoY comparisons.
// What good looks like
Claim Enterprise segment grew 34% QoQ in Q1 - but gross margin compressed from 62% to 54%.
Evidence Rows 14–29, segment = "Enterprise", revenue, cogs.
Calculation Q4 Enterprise revenue = $4.12M, GM = 62%. Q1 = $5.52M, GM = 54%. Growth = +34.0%. Margin delta = -8 pts.
Confidence High at segment level. Cause of margin compression is uncheckable from this file - need COGS breakdown.
// Stacked bar Revenue · GM vs COGS
Revenue grew 34% QoQ, gross margin compressed 8 points
$6M $3M $0 $4.12M $5.52M 62% GM 54% GM Q4 FY24 Q1 FY25 +34% REV / -8 PTS GM GM COGS
Focal: +34% rev / -8pts GM Flag: COGS breakdown needed
ThinkerMetrics
end of playbook · v1.0

The model is a junior analyst.
You are the editor.

Strict prompts, citations, self-consistency checks, and cross-model audits are not paranoia. They are the only way to get AI analysis you can defend out loud.

Same four prompts. Whatever your role. Whatever your data.

CSV
01 Schema 02 Analyze 03 Visualize 04 Brief
★ Cited
✓ Verified
⚐ Honest
Ground it. Cite it. Audit it. Ship it.
Keep learning at thinkermetrics.com _