kanmi-perf-revenue 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +196 -186
  2. package/dist/empirical/ab-testing.d.ts +83 -0
  3. package/dist/empirical/ab-testing.d.ts.map +1 -0
  4. package/dist/empirical/ab-testing.js +281 -0
  5. package/dist/empirical/ab-testing.js.map +1 -0
  6. package/dist/empirical/alerting.d.ts +85 -0
  7. package/dist/empirical/alerting.d.ts.map +1 -0
  8. package/dist/empirical/alerting.js +358 -0
  9. package/dist/empirical/alerting.js.map +1 -0
  10. package/dist/empirical/attribution.d.ts +80 -0
  11. package/dist/empirical/attribution.d.ts.map +1 -0
  12. package/dist/empirical/attribution.js +305 -0
  13. package/dist/empirical/attribution.js.map +1 -0
  14. package/dist/empirical/cohort.d.ts +75 -0
  15. package/dist/empirical/cohort.d.ts.map +1 -0
  16. package/dist/empirical/cohort.js +305 -0
  17. package/dist/empirical/cohort.js.map +1 -0
  18. package/dist/empirical/conversion-curve.d.ts +7 -10
  19. package/dist/empirical/conversion-curve.d.ts.map +1 -1
  20. package/dist/empirical/conversion-curve.js +37 -4
  21. package/dist/empirical/conversion-curve.js.map +1 -1
  22. package/dist/empirical/correlation.d.ts +91 -0
  23. package/dist/empirical/correlation.d.ts.map +1 -0
  24. package/dist/empirical/correlation.js +461 -0
  25. package/dist/empirical/correlation.js.map +1 -0
  26. package/dist/empirical/data-import.d.ts +22 -0
  27. package/dist/empirical/data-import.d.ts.map +1 -1
  28. package/dist/empirical/data-import.js +44 -0
  29. package/dist/empirical/data-import.js.map +1 -1
  30. package/dist/empirical/datadog-session-query.d.ts +32 -0
  31. package/dist/empirical/datadog-session-query.d.ts.map +1 -1
  32. package/dist/empirical/datadog-session-query.js +238 -17
  33. package/dist/empirical/datadog-session-query.js.map +1 -1
  34. package/dist/empirical/engagement-analysis.d.ts +112 -0
  35. package/dist/empirical/engagement-analysis.d.ts.map +1 -0
  36. package/dist/empirical/engagement-analysis.js +354 -0
  37. package/dist/empirical/engagement-analysis.js.map +1 -0
  38. package/dist/empirical/export.d.ts +75 -0
  39. package/dist/empirical/export.d.ts.map +1 -0
  40. package/dist/empirical/export.js +392 -0
  41. package/dist/empirical/export.js.map +1 -0
  42. package/dist/empirical/forecasting.d.ts +80 -0
  43. package/dist/empirical/forecasting.d.ts.map +1 -0
  44. package/dist/empirical/forecasting.js +287 -0
  45. package/dist/empirical/forecasting.js.map +1 -0
  46. package/dist/empirical/funnel.d.ts +66 -0
  47. package/dist/empirical/funnel.d.ts.map +1 -0
  48. package/dist/empirical/funnel.js +293 -0
  49. package/dist/empirical/funnel.js.map +1 -0
  50. package/dist/empirical/history.d.ts +198 -0
  51. package/dist/empirical/history.d.ts.map +1 -0
  52. package/dist/empirical/history.js +396 -0
  53. package/dist/empirical/history.js.map +1 -0
  54. package/dist/empirical/index.d.ts +39 -16
  55. package/dist/empirical/index.d.ts.map +1 -1
  56. package/dist/empirical/index.js +95 -13
  57. package/dist/empirical/index.js.map +1 -1
  58. package/dist/empirical/interactions.d.ts +89 -0
  59. package/dist/empirical/interactions.d.ts.map +1 -0
  60. package/dist/empirical/interactions.js +346 -0
  61. package/dist/empirical/interactions.js.map +1 -0
  62. package/dist/empirical/opportunity-calculator.d.ts +6 -18
  63. package/dist/empirical/opportunity-calculator.d.ts.map +1 -1
  64. package/dist/empirical/opportunity-calculator.js +19 -1
  65. package/dist/empirical/opportunity-calculator.js.map +1 -1
  66. package/dist/empirical/report.d.ts +3 -11
  67. package/dist/empirical/report.d.ts.map +1 -1
  68. package/dist/empirical/report.js +11 -7
  69. package/dist/empirical/report.js.map +1 -1
  70. package/dist/empirical/roi-calculator.d.ts +104 -0
  71. package/dist/empirical/roi-calculator.d.ts.map +1 -0
  72. package/dist/empirical/roi-calculator.js +403 -0
  73. package/dist/empirical/roi-calculator.js.map +1 -0
  74. package/dist/empirical/seasonality.d.ts +80 -0
  75. package/dist/empirical/seasonality.d.ts.map +1 -0
  76. package/dist/empirical/seasonality.js +340 -0
  77. package/dist/empirical/seasonality.js.map +1 -0
  78. package/dist/empirical/segmentation.d.ts +135 -0
  79. package/dist/empirical/segmentation.d.ts.map +1 -0
  80. package/dist/empirical/segmentation.js +379 -0
  81. package/dist/empirical/segmentation.js.map +1 -0
  82. package/dist/empirical/statistics.d.ts +118 -0
  83. package/dist/empirical/statistics.d.ts.map +1 -0
  84. package/dist/empirical/statistics.js +344 -0
  85. package/dist/empirical/statistics.js.map +1 -0
  86. package/dist/empirical/sweet-spot.d.ts +81 -0
  87. package/dist/empirical/sweet-spot.d.ts.map +1 -0
  88. package/dist/empirical/sweet-spot.js +198 -0
  89. package/dist/empirical/sweet-spot.js.map +1 -0
  90. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funnel.js","sourceRoot":"","sources":["../../src/empirical/funnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Historical Learning
3
+ *
4
+ * Store past analyses, compare period-over-period, track if fixes improved CVR.
5
+ * The system builds upon itself - no external coefficients, just your data over time.
6
+ *
7
+ * @author Kanmi Obasa <i@kanmiobasa.com>
8
+ */
9
+ import type { AnalysisResult } from './index.js';
10
+ export interface HistoricalEntry {
11
+ id: string;
12
+ timestamp: string;
13
+ period: {
14
+ start: string;
15
+ end: string;
16
+ days: number;
17
+ };
18
+ clientName?: string;
19
+ /** Snapshot of the conversion curves */
20
+ curves: {
21
+ lcp: CurveSnapshot;
22
+ inp: CurveSnapshot;
23
+ cls: CurveSnapshot;
24
+ };
25
+ /** Key metrics for quick comparison */
26
+ metrics: {
27
+ totalSessions: number;
28
+ totalConversions: number;
29
+ overallCvr: number;
30
+ overallAov: number;
31
+ totalRevenue: number;
32
+ /** CVR at "good" threshold for each metric */
33
+ goodCvr: {
34
+ lcp: number;
35
+ inp: number;
36
+ cls: number;
37
+ };
38
+ /** CVR at "poor" threshold for each metric */
39
+ poorCvr: {
40
+ lcp: number;
41
+ inp: number;
42
+ cls: number;
43
+ };
44
+ };
45
+ /** Tags for filtering (e.g., "post-fix", "baseline") */
46
+ tags?: string[];
47
+ notes?: string;
48
+ }
49
+ export interface CurveSnapshot {
50
+ buckets: {
51
+ range: string;
52
+ sessions: number;
53
+ conversions: number;
54
+ cvr: number;
55
+ }[];
56
+ overallCvr: number;
57
+ cvrRange: number;
58
+ }
59
+ export interface PeriodComparison {
60
+ baseline: HistoricalEntry;
61
+ current: HistoricalEntry;
62
+ changes: {
63
+ sessions: {
64
+ absolute: number;
65
+ percent: number;
66
+ };
67
+ conversions: {
68
+ absolute: number;
69
+ percent: number;
70
+ };
71
+ overallCvr: {
72
+ absolute: number;
73
+ percent: number;
74
+ };
75
+ revenue: {
76
+ absolute: number;
77
+ percent: number;
78
+ };
79
+ /** Did "good" performance CVR improve? */
80
+ goodCvrChange: {
81
+ lcp: {
82
+ absolute: number;
83
+ percent: number;
84
+ };
85
+ inp: {
86
+ absolute: number;
87
+ percent: number;
88
+ };
89
+ cls: {
90
+ absolute: number;
91
+ percent: number;
92
+ };
93
+ };
94
+ /** Did "poor" performance CVR improve? (less important, but tracked) */
95
+ poorCvrChange: {
96
+ lcp: {
97
+ absolute: number;
98
+ percent: number;
99
+ };
100
+ inp: {
101
+ absolute: number;
102
+ percent: number;
103
+ };
104
+ cls: {
105
+ absolute: number;
106
+ percent: number;
107
+ };
108
+ };
109
+ };
110
+ /** Distribution shift - did sessions move from poor to good? */
111
+ distributionShift: {
112
+ lcp: {
113
+ goodPctBefore: number;
114
+ goodPctAfter: number;
115
+ shift: number;
116
+ };
117
+ inp: {
118
+ goodPctBefore: number;
119
+ goodPctAfter: number;
120
+ shift: number;
121
+ };
122
+ cls: {
123
+ goodPctBefore: number;
124
+ goodPctAfter: number;
125
+ shift: number;
126
+ };
127
+ };
128
+ /** Summary of what improved, stayed same, or regressed */
129
+ summary: string;
130
+ }
131
+ export interface HistoryStore {
132
+ version: number;
133
+ entries: HistoricalEntry[];
134
+ }
135
+ export declare class HistoryManager {
136
+ private storePath;
137
+ private store;
138
+ constructor(storePath?: string);
139
+ /**
140
+ * Save an analysis result to history.
141
+ */
142
+ save(result: AnalysisResult, options?: {
143
+ tags?: string[];
144
+ notes?: string;
145
+ }): HistoricalEntry;
146
+ /**
147
+ * Get all historical entries.
148
+ */
149
+ getAll(): HistoricalEntry[];
150
+ /**
151
+ * Get entries by tag.
152
+ */
153
+ getByTag(tag: string): HistoricalEntry[];
154
+ /**
155
+ * Get the most recent entry.
156
+ */
157
+ getLatest(): HistoricalEntry | null;
158
+ /**
159
+ * Get entry by ID.
160
+ */
161
+ getById(id: string): HistoricalEntry | null;
162
+ /**
163
+ * Compare two periods.
164
+ */
165
+ compare(baselineId: string, currentId: string): PeriodComparison | null;
166
+ /**
167
+ * Compare current result against the most recent historical entry.
168
+ */
169
+ compareToLatest(result: AnalysisResult): PeriodComparison | null;
170
+ /**
171
+ * Compare current result against a baseline tag (e.g., "baseline", "pre-fix").
172
+ */
173
+ compareToBaseline(result: AnalysisResult, baselineTag?: string): PeriodComparison | null;
174
+ /**
175
+ * Get trend over time for a specific metric.
176
+ */
177
+ getTrend(metric: 'lcp' | 'inp' | 'cls', limit?: number): {
178
+ entries: {
179
+ date: string;
180
+ goodCvr: number;
181
+ poorCvr: number;
182
+ overallCvr: number;
183
+ }[];
184
+ trend: 'improving' | 'stable' | 'declining';
185
+ };
186
+ private load;
187
+ private persist;
188
+ private migrate;
189
+ private createEntry;
190
+ private snapshotCurve;
191
+ private getCvrAtThreshold;
192
+ private getGoodPct;
193
+ private parseUpperBound;
194
+ private computeComparison;
195
+ private generateComparisonSummary;
196
+ }
197
+ export declare function generateComparisonReport(comparison: PeriodComparison): string;
198
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/empirical/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Historical Learning
3
+ *
4
+ * Store past analyses, compare period-over-period, track if fixes improved CVR.
5
+ * The system builds upon itself - no external coefficients, just your data over time.
6
+ *
7
+ * @author Kanmi Obasa <i@kanmiobasa.com>
8
+ */
9
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
10
+ import { join, dirname } from 'path';
11
+ // =============================================================================
12
+ // HISTORY MANAGER
13
+ // =============================================================================
14
+ const STORE_VERSION = 1;
15
+ export class HistoryManager {
16
+ storePath;
17
+ store;
18
+ constructor(storePath) {
19
+ this.storePath = storePath || join(process.cwd(), '.perf-revenue-history.json');
20
+ this.store = this.load();
21
+ }
22
+ /**
23
+ * Save an analysis result to history.
24
+ */
25
+ save(result, options) {
26
+ const entry = this.createEntry(result, options);
27
+ this.store.entries.push(entry);
28
+ this.persist();
29
+ return entry;
30
+ }
31
+ /**
32
+ * Get all historical entries.
33
+ */
34
+ getAll() {
35
+ return [...this.store.entries];
36
+ }
37
+ /**
38
+ * Get entries by tag.
39
+ */
40
+ getByTag(tag) {
41
+ return this.store.entries.filter((e) => e.tags?.includes(tag));
42
+ }
43
+ /**
44
+ * Get the most recent entry.
45
+ */
46
+ getLatest() {
47
+ if (this.store.entries.length === 0)
48
+ return null;
49
+ return this.store.entries[this.store.entries.length - 1];
50
+ }
51
+ /**
52
+ * Get entry by ID.
53
+ */
54
+ getById(id) {
55
+ return this.store.entries.find((e) => e.id === id) || null;
56
+ }
57
+ /**
58
+ * Compare two periods.
59
+ */
60
+ compare(baselineId, currentId) {
61
+ const baseline = this.getById(baselineId);
62
+ const current = this.getById(currentId);
63
+ if (!baseline || !current)
64
+ return null;
65
+ return this.computeComparison(baseline, current);
66
+ }
67
+ /**
68
+ * Compare current result against the most recent historical entry.
69
+ */
70
+ compareToLatest(result) {
71
+ const latest = this.getLatest();
72
+ if (!latest)
73
+ return null;
74
+ const current = this.createEntry(result);
75
+ return this.computeComparison(latest, current);
76
+ }
77
+ /**
78
+ * Compare current result against a baseline tag (e.g., "baseline", "pre-fix").
79
+ */
80
+ compareToBaseline(result, baselineTag = 'baseline') {
81
+ const baselines = this.getByTag(baselineTag);
82
+ if (baselines.length === 0)
83
+ return null;
84
+ // Use most recent baseline
85
+ const baseline = baselines[baselines.length - 1];
86
+ const current = this.createEntry(result);
87
+ return this.computeComparison(baseline, current);
88
+ }
89
+ /**
90
+ * Get trend over time for a specific metric.
91
+ */
92
+ getTrend(metric, limit = 10) {
93
+ const entries = this.store.entries.slice(-limit).map((e) => ({
94
+ date: e.period.end,
95
+ goodCvr: e.metrics.goodCvr[metric],
96
+ poorCvr: e.metrics.poorCvr[metric],
97
+ overallCvr: e.metrics.overallCvr,
98
+ }));
99
+ // Simple trend detection: compare first half avg to second half avg
100
+ if (entries.length < 4) {
101
+ return { entries, trend: 'stable' };
102
+ }
103
+ const mid = Math.floor(entries.length / 2);
104
+ const firstHalf = entries.slice(0, mid);
105
+ const secondHalf = entries.slice(mid);
106
+ const firstAvg = firstHalf.reduce((sum, e) => sum + e.overallCvr, 0) / firstHalf.length;
107
+ const secondAvg = secondHalf.reduce((sum, e) => sum + e.overallCvr, 0) / secondHalf.length;
108
+ const change = (secondAvg - firstAvg) / firstAvg;
109
+ let trend = 'stable';
110
+ if (change > 0.05)
111
+ trend = 'improving';
112
+ else if (change < -0.05)
113
+ trend = 'declining';
114
+ return { entries, trend };
115
+ }
116
+ // ===========================================================================
117
+ // PRIVATE METHODS
118
+ // ===========================================================================
119
+ load() {
120
+ if (!existsSync(this.storePath)) {
121
+ return { version: STORE_VERSION, entries: [] };
122
+ }
123
+ try {
124
+ const content = readFileSync(this.storePath, 'utf-8');
125
+ const data = JSON.parse(content);
126
+ // Version migration if needed
127
+ if (data.version !== STORE_VERSION) {
128
+ return this.migrate(data);
129
+ }
130
+ return data;
131
+ }
132
+ catch {
133
+ return { version: STORE_VERSION, entries: [] };
134
+ }
135
+ }
136
+ persist() {
137
+ const dir = dirname(this.storePath);
138
+ if (!existsSync(dir)) {
139
+ mkdirSync(dir, { recursive: true });
140
+ }
141
+ writeFileSync(this.storePath, JSON.stringify(this.store, null, 2));
142
+ }
143
+ migrate(_data) {
144
+ // Future: handle version migrations
145
+ return { version: STORE_VERSION, entries: [] };
146
+ }
147
+ createEntry(result, options) {
148
+ const { curves, metadata } = result;
149
+ return {
150
+ id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
151
+ timestamp: new Date().toISOString(),
152
+ period: metadata.period,
153
+ curves: {
154
+ lcp: this.snapshotCurve(curves.lcp),
155
+ inp: this.snapshotCurve(curves.inp),
156
+ cls: this.snapshotCurve(curves.cls),
157
+ },
158
+ metrics: {
159
+ totalSessions: metadata.totalSessions,
160
+ totalConversions: metadata.sessionsWithConversions,
161
+ overallCvr: curves.lcp.summary.overall_cvr,
162
+ overallAov: curves.lcp.summary.overall_aov,
163
+ totalRevenue: curves.lcp.summary.total_revenue,
164
+ goodCvr: {
165
+ lcp: this.getCvrAtThreshold(curves.lcp, 2500, 'below'),
166
+ inp: this.getCvrAtThreshold(curves.inp, 200, 'below'),
167
+ cls: this.getCvrAtThreshold(curves.cls, 100, 'below'), // scaled
168
+ },
169
+ poorCvr: {
170
+ lcp: this.getCvrAtThreshold(curves.lcp, 4000, 'above'),
171
+ inp: this.getCvrAtThreshold(curves.inp, 500, 'above'),
172
+ cls: this.getCvrAtThreshold(curves.cls, 250, 'above'), // scaled
173
+ },
174
+ },
175
+ tags: options?.tags,
176
+ notes: options?.notes,
177
+ };
178
+ }
179
+ snapshotCurve(curve) {
180
+ return {
181
+ buckets: curve.buckets.map((b) => ({
182
+ range: b.range,
183
+ sessions: b.sessions,
184
+ conversions: b.conversions,
185
+ cvr: b.conversion_rate,
186
+ })),
187
+ overallCvr: curve.summary.overall_cvr,
188
+ cvrRange: curve.summary.cvr_range,
189
+ };
190
+ }
191
+ getCvrAtThreshold(curve, threshold, side) {
192
+ let sessions = 0;
193
+ let conversions = 0;
194
+ for (const bucket of curve.buckets) {
195
+ const isBelow = bucket.upper_ms <= threshold;
196
+ const isAbove = bucket.lower_ms >= threshold;
197
+ if ((side === 'below' && isBelow) || (side === 'above' && isAbove)) {
198
+ sessions += bucket.sessions;
199
+ conversions += bucket.conversions;
200
+ }
201
+ }
202
+ return sessions > 0 ? conversions / sessions : 0;
203
+ }
204
+ getGoodPct(curve, threshold) {
205
+ let goodSessions = 0;
206
+ let totalSessions = 0;
207
+ for (const bucket of curve.buckets) {
208
+ totalSessions += bucket.sessions;
209
+ // Parse the range to check if it's below threshold
210
+ // This is approximate - relies on range format
211
+ const upperMs = this.parseUpperBound(bucket.range);
212
+ if (upperMs <= threshold) {
213
+ goodSessions += bucket.sessions;
214
+ }
215
+ }
216
+ return totalSessions > 0 ? goodSessions / totalSessions : 0;
217
+ }
218
+ parseUpperBound(range) {
219
+ // Handle formats like "1.0s-1.5s", "0.05-0.10"
220
+ const match = range.match(/-([0-9.]+)(s)?/);
221
+ if (!match)
222
+ return Infinity;
223
+ const value = parseFloat(match[1]);
224
+ const isSeconds = match[2] === 's';
225
+ return isSeconds ? value * 1000 : value * 1000; // CLS is already scaled
226
+ }
227
+ computeComparison(baseline, current) {
228
+ const pctChange = (curr, base) => base !== 0 ? ((curr - base) / base) * 100 : 0;
229
+ const changes = {
230
+ sessions: {
231
+ absolute: current.metrics.totalSessions - baseline.metrics.totalSessions,
232
+ percent: pctChange(current.metrics.totalSessions, baseline.metrics.totalSessions),
233
+ },
234
+ conversions: {
235
+ absolute: current.metrics.totalConversions - baseline.metrics.totalConversions,
236
+ percent: pctChange(current.metrics.totalConversions, baseline.metrics.totalConversions),
237
+ },
238
+ overallCvr: {
239
+ absolute: current.metrics.overallCvr - baseline.metrics.overallCvr,
240
+ percent: pctChange(current.metrics.overallCvr, baseline.metrics.overallCvr),
241
+ },
242
+ revenue: {
243
+ absolute: current.metrics.totalRevenue - baseline.metrics.totalRevenue,
244
+ percent: pctChange(current.metrics.totalRevenue, baseline.metrics.totalRevenue),
245
+ },
246
+ goodCvrChange: {
247
+ lcp: {
248
+ absolute: current.metrics.goodCvr.lcp - baseline.metrics.goodCvr.lcp,
249
+ percent: pctChange(current.metrics.goodCvr.lcp, baseline.metrics.goodCvr.lcp),
250
+ },
251
+ inp: {
252
+ absolute: current.metrics.goodCvr.inp - baseline.metrics.goodCvr.inp,
253
+ percent: pctChange(current.metrics.goodCvr.inp, baseline.metrics.goodCvr.inp),
254
+ },
255
+ cls: {
256
+ absolute: current.metrics.goodCvr.cls - baseline.metrics.goodCvr.cls,
257
+ percent: pctChange(current.metrics.goodCvr.cls, baseline.metrics.goodCvr.cls),
258
+ },
259
+ },
260
+ poorCvrChange: {
261
+ lcp: {
262
+ absolute: current.metrics.poorCvr.lcp - baseline.metrics.poorCvr.lcp,
263
+ percent: pctChange(current.metrics.poorCvr.lcp, baseline.metrics.poorCvr.lcp),
264
+ },
265
+ inp: {
266
+ absolute: current.metrics.poorCvr.inp - baseline.metrics.poorCvr.inp,
267
+ percent: pctChange(current.metrics.poorCvr.inp, baseline.metrics.poorCvr.inp),
268
+ },
269
+ cls: {
270
+ absolute: current.metrics.poorCvr.cls - baseline.metrics.poorCvr.cls,
271
+ percent: pctChange(current.metrics.poorCvr.cls, baseline.metrics.poorCvr.cls),
272
+ },
273
+ },
274
+ };
275
+ // Distribution shift
276
+ const distributionShift = {
277
+ lcp: {
278
+ goodPctBefore: this.getGoodPct(baseline.curves.lcp, 2500),
279
+ goodPctAfter: this.getGoodPct(current.curves.lcp, 2500),
280
+ shift: 0,
281
+ },
282
+ inp: {
283
+ goodPctBefore: this.getGoodPct(baseline.curves.inp, 200),
284
+ goodPctAfter: this.getGoodPct(current.curves.inp, 200),
285
+ shift: 0,
286
+ },
287
+ cls: {
288
+ goodPctBefore: this.getGoodPct(baseline.curves.cls, 100),
289
+ goodPctAfter: this.getGoodPct(current.curves.cls, 100),
290
+ shift: 0,
291
+ },
292
+ };
293
+ distributionShift.lcp.shift = distributionShift.lcp.goodPctAfter - distributionShift.lcp.goodPctBefore;
294
+ distributionShift.inp.shift = distributionShift.inp.goodPctAfter - distributionShift.inp.goodPctBefore;
295
+ distributionShift.cls.shift = distributionShift.cls.goodPctAfter - distributionShift.cls.goodPctBefore;
296
+ // Generate summary
297
+ const summary = this.generateComparisonSummary(changes, distributionShift);
298
+ return {
299
+ baseline,
300
+ current,
301
+ changes,
302
+ distributionShift,
303
+ summary,
304
+ };
305
+ }
306
+ generateComparisonSummary(changes, shift) {
307
+ const lines = [];
308
+ // Overall CVR
309
+ if (changes.overallCvr.percent > 5) {
310
+ lines.push(`CVR improved by ${changes.overallCvr.percent.toFixed(1)}%`);
311
+ }
312
+ else if (changes.overallCvr.percent < -5) {
313
+ lines.push(`CVR declined by ${Math.abs(changes.overallCvr.percent).toFixed(1)}%`);
314
+ }
315
+ else {
316
+ lines.push('CVR stable (within 5%)');
317
+ }
318
+ // Distribution shifts
319
+ if (shift.lcp.shift > 0.05) {
320
+ lines.push(`LCP distribution improved: ${(shift.lcp.shift * 100).toFixed(1)}pp more sessions in "good"`);
321
+ }
322
+ if (shift.inp.shift > 0.05) {
323
+ lines.push(`INP distribution improved: ${(shift.inp.shift * 100).toFixed(1)}pp more sessions in "good"`);
324
+ }
325
+ if (shift.cls.shift > 0.05) {
326
+ lines.push(`CLS distribution improved: ${(shift.cls.shift * 100).toFixed(1)}pp more sessions in "good"`);
327
+ }
328
+ // Revenue
329
+ if (changes.revenue.absolute > 0) {
330
+ lines.push(`Revenue up $${Math.round(changes.revenue.absolute).toLocaleString()} (${changes.revenue.percent.toFixed(1)}%)`);
331
+ }
332
+ else if (changes.revenue.absolute < 0) {
333
+ lines.push(`Revenue down $${Math.abs(Math.round(changes.revenue.absolute)).toLocaleString()} (${Math.abs(changes.revenue.percent).toFixed(1)}%)`);
334
+ }
335
+ return lines.join('. ') + '.';
336
+ }
337
+ }
338
+ // =============================================================================
339
+ // COMPARISON REPORT GENERATOR
340
+ // =============================================================================
341
+ export function generateComparisonReport(comparison) {
342
+ const { baseline, current, changes, distributionShift, summary } = comparison;
343
+ const lines = [];
344
+ lines.push('# Period-over-Period Comparison');
345
+ lines.push('');
346
+ lines.push(`**Baseline:** ${baseline.period.start} to ${baseline.period.end}`);
347
+ lines.push(`**Current:** ${current.period.start} to ${current.period.end}`);
348
+ lines.push('');
349
+ lines.push('## Summary');
350
+ lines.push('');
351
+ lines.push(summary);
352
+ lines.push('');
353
+ lines.push('## Key Metrics');
354
+ lines.push('');
355
+ lines.push('| Metric | Baseline | Current | Change |');
356
+ lines.push('|--------|----------|---------|--------|');
357
+ lines.push(`| Sessions | ${baseline.metrics.totalSessions.toLocaleString()} | ${current.metrics.totalSessions.toLocaleString()} | ${formatChange(changes.sessions)} |`);
358
+ lines.push(`| Conversions | ${baseline.metrics.totalConversions.toLocaleString()} | ${current.metrics.totalConversions.toLocaleString()} | ${formatChange(changes.conversions)} |`);
359
+ lines.push(`| Overall CVR | ${(baseline.metrics.overallCvr * 100).toFixed(2)}% | ${(current.metrics.overallCvr * 100).toFixed(2)}% | ${formatCvrChange(changes.overallCvr)} |`);
360
+ lines.push(`| Revenue | $${Math.round(baseline.metrics.totalRevenue).toLocaleString()} | $${Math.round(current.metrics.totalRevenue).toLocaleString()} | ${formatChange(changes.revenue)} |`);
361
+ lines.push('');
362
+ lines.push('## CVR by Performance Tier');
363
+ lines.push('');
364
+ lines.push('### "Good" Performance CVR');
365
+ lines.push('');
366
+ lines.push('| Metric | Baseline | Current | Change |');
367
+ lines.push('|--------|----------|---------|--------|');
368
+ lines.push(`| LCP ≤2.5s | ${(baseline.metrics.goodCvr.lcp * 100).toFixed(2)}% | ${(current.metrics.goodCvr.lcp * 100).toFixed(2)}% | ${formatCvrChange(changes.goodCvrChange.lcp)} |`);
369
+ lines.push(`| INP ≤200ms | ${(baseline.metrics.goodCvr.inp * 100).toFixed(2)}% | ${(current.metrics.goodCvr.inp * 100).toFixed(2)}% | ${formatCvrChange(changes.goodCvrChange.inp)} |`);
370
+ lines.push(`| CLS ≤0.1 | ${(baseline.metrics.goodCvr.cls * 100).toFixed(2)}% | ${(current.metrics.goodCvr.cls * 100).toFixed(2)}% | ${formatCvrChange(changes.goodCvrChange.cls)} |`);
371
+ lines.push('');
372
+ lines.push('### Distribution Shift');
373
+ lines.push('');
374
+ lines.push('| Metric | % Good (Before) | % Good (After) | Shift |');
375
+ lines.push('|--------|-----------------|----------------|-------|');
376
+ lines.push(`| LCP | ${(distributionShift.lcp.goodPctBefore * 100).toFixed(1)}% | ${(distributionShift.lcp.goodPctAfter * 100).toFixed(1)}% | ${formatShift(distributionShift.lcp.shift)} |`);
377
+ lines.push(`| INP | ${(distributionShift.inp.goodPctBefore * 100).toFixed(1)}% | ${(distributionShift.inp.goodPctAfter * 100).toFixed(1)}% | ${formatShift(distributionShift.inp.shift)} |`);
378
+ lines.push(`| CLS | ${(distributionShift.cls.goodPctBefore * 100).toFixed(1)}% | ${(distributionShift.cls.goodPctAfter * 100).toFixed(1)}% | ${formatShift(distributionShift.cls.shift)} |`);
379
+ lines.push('');
380
+ lines.push('---');
381
+ lines.push('*Data from your empirical conversion curves. No assumed coefficients.*');
382
+ return lines.join('\n');
383
+ }
384
+ function formatChange(change) {
385
+ const sign = change.percent >= 0 ? '+' : '';
386
+ return `${sign}${change.percent.toFixed(1)}%`;
387
+ }
388
+ function formatCvrChange(change) {
389
+ const sign = change.absolute >= 0 ? '+' : '';
390
+ return `${sign}${(change.absolute * 100).toFixed(2)}pp`;
391
+ }
392
+ function formatShift(shift) {
393
+ const sign = shift >= 0 ? '+' : '';
394
+ return `${sign}${(shift * 100).toFixed(1)}pp`;
395
+ }
396
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/empirical/history.ts"],"names":[],"mappings":"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"}