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,305 @@
1
+ /**
2
+ * Cohort Analysis
3
+ *
4
+ * Track same users over time to understand:
5
+ * - How does performance affect repeat purchases?
6
+ * - Do users with good first-experience return more?
7
+ * - Lifetime value by performance cohort
8
+ *
9
+ * @author Kanmi Obasa <i@kanmiobasa.com>
10
+ */
11
+ // =============================================================================
12
+ // PERFORMANCE COHORT ANALYSIS
13
+ // =============================================================================
14
+ /**
15
+ * Analyze users by performance cohort.
16
+ */
17
+ export function analyzePerformanceCohorts(sessions, metric = 'lcp') {
18
+ // Group sessions by user
19
+ const userSessions = groupByUser(sessions);
20
+ // Define cohorts
21
+ const cohortDefinitions = getCohortDefinitions(metric);
22
+ const cohorts = [];
23
+ for (const def of cohortDefinitions) {
24
+ const usersInCohort = new Map();
25
+ // Find users whose FIRST session falls in this performance range
26
+ for (const [userId, userSessionList] of userSessions) {
27
+ if (userSessionList.length === 0)
28
+ continue;
29
+ // Sort by timestamp to find first session
30
+ const sorted = [...userSessionList].sort((a, b) => (a.timestamp || '').localeCompare(b.timestamp || ''));
31
+ const firstSession = sorted[0];
32
+ const metricValue = getMetricValue(firstSession, metric);
33
+ if (metricValue !== null && metricValue >= def.min && metricValue < def.max) {
34
+ usersInCohort.set(userId, userSessionList);
35
+ }
36
+ }
37
+ if (usersInCohort.size === 0)
38
+ continue;
39
+ // Calculate cohort metrics
40
+ let totalSessions = 0;
41
+ let firstSessionConversions = 0;
42
+ let repeatPurchases = 0;
43
+ let totalRevenue = 0;
44
+ let purchaseCount = 0;
45
+ for (const [_userId, userSessionList] of usersInCohort) {
46
+ totalSessions += userSessionList.length;
47
+ const sorted = [...userSessionList].sort((a, b) => (a.timestamp || '').localeCompare(b.timestamp || ''));
48
+ // First session conversion
49
+ if (sorted[0].has_purchase) {
50
+ firstSessionConversions++;
51
+ purchaseCount++;
52
+ totalRevenue += sorted[0].purchase_value;
53
+ }
54
+ // Repeat purchases (any subsequent conversion)
55
+ const repeatConversions = sorted.slice(1).filter(s => s.has_purchase);
56
+ if (repeatConversions.length > 0) {
57
+ repeatPurchases++;
58
+ purchaseCount += repeatConversions.length;
59
+ totalRevenue += repeatConversions.reduce((sum, s) => sum + s.purchase_value, 0);
60
+ }
61
+ }
62
+ const uniqueUsers = usersInCohort.size;
63
+ const aov = purchaseCount > 0 ? totalRevenue / purchaseCount : 0;
64
+ const ltv = uniqueUsers > 0 ? totalRevenue / uniqueUsers : 0;
65
+ cohorts.push({
66
+ cohortId: def.id,
67
+ description: def.description,
68
+ range: { min: def.min, max: def.max },
69
+ uniqueUsers,
70
+ totalSessions,
71
+ avgSessionsPerUser: uniqueUsers > 0 ? totalSessions / uniqueUsers : 0,
72
+ firstSessionCvr: uniqueUsers > 0 ? firstSessionConversions / uniqueUsers : 0,
73
+ repeatPurchaseRate: uniqueUsers > 0 ? repeatPurchases / uniqueUsers : 0,
74
+ aov,
75
+ ltv,
76
+ });
77
+ }
78
+ // Generate insights
79
+ const insights = [];
80
+ const recommendations = [];
81
+ if (cohorts.length >= 2) {
82
+ const best = cohorts.reduce((a, b) => a.ltv > b.ltv ? a : b);
83
+ const worst = cohorts.reduce((a, b) => a.ltv < b.ltv ? a : b);
84
+ if (best.ltv > worst.ltv * 1.2 && best.uniqueUsers >= 10 && worst.uniqueUsers >= 10) {
85
+ insights.push(`Users with ${best.description} have ${((best.ltv / worst.ltv - 1) * 100).toFixed(0)}% higher LTV than ${worst.description}`);
86
+ }
87
+ const goodCohort = cohorts.find(c => c.cohortId === 'good');
88
+ const poorCohort = cohorts.find(c => c.cohortId === 'poor');
89
+ if (goodCohort && poorCohort) {
90
+ if (goodCohort.repeatPurchaseRate > poorCohort.repeatPurchaseRate * 1.2) {
91
+ insights.push(`Good performance users are ${((goodCohort.repeatPurchaseRate / poorCohort.repeatPurchaseRate - 1) * 100).toFixed(0)}% more likely to make repeat purchases`);
92
+ recommendations.push('Improving first-session performance increases customer lifetime value');
93
+ }
94
+ if (goodCohort.avgSessionsPerUser > poorCohort.avgSessionsPerUser * 1.1) {
95
+ insights.push(`Good performance users return ${((goodCohort.avgSessionsPerUser / poorCohort.avgSessionsPerUser - 1) * 100).toFixed(0)}% more often`);
96
+ }
97
+ }
98
+ }
99
+ return {
100
+ type: 'performance',
101
+ performanceCohorts: cohorts,
102
+ insights,
103
+ recommendations,
104
+ };
105
+ }
106
+ /**
107
+ * Analyze users by acquisition time cohort.
108
+ */
109
+ export function analyzeTimeCohorts(sessions) {
110
+ // Group sessions by user
111
+ const userSessions = groupByUser(sessions);
112
+ // Determine acquisition week for each user
113
+ const userAcquisition = new Map();
114
+ for (const [userId, userSessionList] of userSessions) {
115
+ const sorted = [...userSessionList].sort((a, b) => (a.timestamp || '').localeCompare(b.timestamp || ''));
116
+ const firstSession = sorted[0];
117
+ const acquisitionWeek = getWeekId(new Date(firstSession.timestamp || Date.now()));
118
+ userAcquisition.set(userId, {
119
+ week: acquisitionWeek,
120
+ sessions: userSessionList,
121
+ });
122
+ }
123
+ // Group by acquisition week
124
+ const weeklyUsers = new Map();
125
+ for (const [userId, data] of userAcquisition) {
126
+ if (!weeklyUsers.has(data.week)) {
127
+ weeklyUsers.set(data.week, new Map());
128
+ }
129
+ weeklyUsers.get(data.week).set(userId, data.sessions);
130
+ }
131
+ // Build cohort analysis
132
+ const timeCohorts = [];
133
+ const sortedWeeks = Array.from(weeklyUsers.keys()).sort();
134
+ for (const weekId of sortedWeeks) {
135
+ const usersThisWeek = weeklyUsers.get(weekId);
136
+ const newUsers = usersThisWeek.size;
137
+ let week0Conversions = 0;
138
+ let week1Conversions = 0;
139
+ let week2Conversions = 0;
140
+ let week3PlusConversions = 0;
141
+ for (const [_userId, userSessionList] of usersThisWeek) {
142
+ for (const session of userSessionList) {
143
+ if (!session.has_purchase)
144
+ continue;
145
+ const sessionWeek = getWeekId(new Date(session.timestamp || Date.now()));
146
+ const weekDiff = getWeekDiff(weekId, sessionWeek);
147
+ if (weekDiff === 0)
148
+ week0Conversions++;
149
+ else if (weekDiff === 1)
150
+ week1Conversions++;
151
+ else if (weekDiff === 2)
152
+ week2Conversions++;
153
+ else
154
+ week3PlusConversions++;
155
+ }
156
+ }
157
+ const totalConversions = week0Conversions + week1Conversions + week2Conversions + week3PlusConversions;
158
+ const returnedUsers = new Set();
159
+ for (const [userId, userSessionList] of usersThisWeek) {
160
+ const hasLaterSession = userSessionList.some(s => {
161
+ const sessionWeek = getWeekId(new Date(s.timestamp || Date.now()));
162
+ return getWeekDiff(weekId, sessionWeek) > 0;
163
+ });
164
+ if (hasLaterSession) {
165
+ returnedUsers.add(userId);
166
+ }
167
+ }
168
+ timeCohorts.push({
169
+ weekId,
170
+ newUsers,
171
+ week0Conversions,
172
+ week1Conversions,
173
+ week2Conversions,
174
+ week3PlusConversions,
175
+ totalConversions,
176
+ retentionRate: newUsers > 0 ? returnedUsers.size / newUsers : 0,
177
+ });
178
+ }
179
+ // Generate insights
180
+ const insights = [];
181
+ const recommendations = [];
182
+ if (timeCohorts.length >= 3) {
183
+ const avgRetention = timeCohorts.reduce((sum, c) => sum + c.retentionRate, 0) / timeCohorts.length;
184
+ insights.push(`Average week-over-week retention: ${(avgRetention * 100).toFixed(1)}%`);
185
+ const recentCohorts = timeCohorts.slice(-3);
186
+ const recentAvg = recentCohorts.reduce((sum, c) => sum + c.retentionRate, 0) / recentCohorts.length;
187
+ if (recentAvg > avgRetention * 1.1) {
188
+ insights.push('Retention trending upward in recent cohorts');
189
+ }
190
+ else if (recentAvg < avgRetention * 0.9) {
191
+ insights.push('Retention trending downward - investigate recent changes');
192
+ recommendations.push('Review recent performance changes that may affect user retention');
193
+ }
194
+ }
195
+ return {
196
+ type: 'time',
197
+ timeCohorts,
198
+ insights,
199
+ recommendations,
200
+ };
201
+ }
202
+ // =============================================================================
203
+ // REPORT GENERATION
204
+ // =============================================================================
205
+ /**
206
+ * Generate markdown report for cohort analysis.
207
+ */
208
+ export function generateCohortMarkdown(analysis) {
209
+ const lines = [];
210
+ lines.push('## Cohort Analysis');
211
+ lines.push('');
212
+ if (analysis.performanceCohorts) {
213
+ lines.push('### Performance Cohorts');
214
+ lines.push('');
215
+ lines.push('Users grouped by their first-session performance.');
216
+ lines.push('');
217
+ lines.push('| Cohort | Users | Sessions/User | First CVR | Repeat Rate | LTV |');
218
+ lines.push('|--------|-------|---------------|-----------|-------------|-----|');
219
+ for (const cohort of analysis.performanceCohorts) {
220
+ lines.push(`| ${cohort.description} | ${cohort.uniqueUsers.toLocaleString()} | ${cohort.avgSessionsPerUser.toFixed(2)} | ${(cohort.firstSessionCvr * 100).toFixed(2)}% | ${(cohort.repeatPurchaseRate * 100).toFixed(2)}% | $${cohort.ltv.toFixed(2)} |`);
221
+ }
222
+ lines.push('');
223
+ }
224
+ if (analysis.timeCohorts && analysis.timeCohorts.length > 0) {
225
+ lines.push('### Time Cohorts');
226
+ lines.push('');
227
+ lines.push('Users grouped by acquisition week.');
228
+ lines.push('');
229
+ lines.push('| Week | New Users | Week 0 | Week 1 | Week 2 | Week 3+ | Retention |');
230
+ lines.push('|------|-----------|--------|--------|--------|---------|-----------|');
231
+ for (const cohort of analysis.timeCohorts.slice(-10)) {
232
+ lines.push(`| ${cohort.weekId} | ${cohort.newUsers} | ${cohort.week0Conversions} | ${cohort.week1Conversions} | ${cohort.week2Conversions} | ${cohort.week3PlusConversions} | ${(cohort.retentionRate * 100).toFixed(1)}% |`);
233
+ }
234
+ lines.push('');
235
+ }
236
+ if (analysis.insights.length > 0) {
237
+ lines.push('### Insights');
238
+ lines.push('');
239
+ for (const insight of analysis.insights) {
240
+ lines.push(`- ${insight}`);
241
+ }
242
+ lines.push('');
243
+ }
244
+ if (analysis.recommendations.length > 0) {
245
+ lines.push('### Recommendations');
246
+ lines.push('');
247
+ for (const rec of analysis.recommendations) {
248
+ lines.push(`- ${rec}`);
249
+ }
250
+ lines.push('');
251
+ }
252
+ return lines.join('\n');
253
+ }
254
+ // =============================================================================
255
+ // HELPERS
256
+ // =============================================================================
257
+ function groupByUser(sessions) {
258
+ const result = new Map();
259
+ for (const session of sessions) {
260
+ const userId = session.user_id || session.session_id;
261
+ if (!result.has(userId)) {
262
+ result.set(userId, []);
263
+ }
264
+ result.get(userId).push(session);
265
+ }
266
+ return result;
267
+ }
268
+ function getMetricValue(session, metric) {
269
+ switch (metric) {
270
+ case 'lcp': return session.lcp_ms;
271
+ case 'inp': return session.inp_ms;
272
+ case 'cls': return session.cls;
273
+ case 'fcp': return session.fcp_ms;
274
+ case 'ttfb': return session.ttfb_ms;
275
+ default: return null;
276
+ }
277
+ }
278
+ function getCohortDefinitions(metric) {
279
+ const thresholds = {
280
+ lcp: { good: 2500, poor: 4000 },
281
+ inp: { good: 200, poor: 500 },
282
+ cls: { good: 0.1, poor: 0.25 },
283
+ fcp: { good: 1800, poor: 3000 },
284
+ ttfb: { good: 800, poor: 1800 },
285
+ };
286
+ const t = thresholds[metric] || thresholds.lcp;
287
+ return [
288
+ { id: 'good', description: `Good ${metric.toUpperCase()}`, min: 0, max: t.good },
289
+ { id: 'needs_improvement', description: `Needs Improvement ${metric.toUpperCase()}`, min: t.good, max: t.poor },
290
+ { id: 'poor', description: `Poor ${metric.toUpperCase()}`, min: t.poor, max: Infinity },
291
+ ];
292
+ }
293
+ function getWeekId(date) {
294
+ const year = date.getFullYear();
295
+ const startOfYear = new Date(year, 0, 1);
296
+ const days = Math.floor((date.getTime() - startOfYear.getTime()) / (24 * 60 * 60 * 1000));
297
+ const week = Math.ceil((days + 1) / 7);
298
+ return `${year}-W${week.toString().padStart(2, '0')}`;
299
+ }
300
+ function getWeekDiff(week1, week2) {
301
+ const [year1, w1] = week1.split('-W').map(Number);
302
+ const [year2, w2] = week2.split('-W').map(Number);
303
+ return (year2 - year1) * 52 + (w2 - w1);
304
+ }
305
+ //# sourceMappingURL=cohort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohort.js","sourceRoot":"","sources":["../../src/empirical/cohort.ts"],"names":[],"mappings":"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"}
@@ -29,8 +29,8 @@ export interface ConversionBucket {
29
29
  confidence: 'high' | 'medium' | 'low';
30
30
  }
31
31
  export interface ConversionCurve {
32
- /** The metric being measured (lcp, inp, cls) */
33
- metric: 'lcp' | 'inp' | 'cls';
32
+ /** The metric being measured */
33
+ metric: PerformanceMetric;
34
34
  /** Buckets from fastest to slowest */
35
35
  buckets: ConversionBucket[];
36
36
  /** Summary statistics */
@@ -45,7 +45,7 @@ export interface ConversionCurve {
45
45
  /** Relative CVR drop from fast to slow (e.g., 0.35 = 35% lower) */
46
46
  relative_cvr_drop: number;
47
47
  };
48
- /** Core Web Vitals thresholds for reference */
48
+ /** Performance thresholds for reference */
49
49
  thresholds: {
50
50
  good: number;
51
51
  needs_improvement: number;
@@ -59,21 +59,18 @@ export interface CurveBuilderConfig {
59
59
  /** Minimum sessions per bucket for medium confidence. Default: 30 */
60
60
  minSessionsMediumConfidence?: number;
61
61
  }
62
+ export type PerformanceMetric = 'lcp' | 'fcp' | 'inp' | 'cls' | 'ttfb' | 'tti' | 'onload' | 'page_size';
62
63
  /**
63
64
  * Build an empirical conversion curve from session data.
64
65
  *
65
66
  * This is the key function: it takes raw session data and produces
66
67
  * a measured CVR at each performance bucket.
67
68
  */
68
- export declare function buildConversionCurve(sessions: SessionData[], metric: 'lcp' | 'inp' | 'cls', config?: CurveBuilderConfig): ConversionCurve;
69
+ export declare function buildConversionCurve(sessions: SessionData[], metric: PerformanceMetric, config?: CurveBuilderConfig): ConversionCurve;
69
70
  /**
70
- * Build curves for all CWV metrics at once.
71
+ * Build curves for all performance metrics at once.
71
72
  */
72
- export declare function buildAllCurves(sessions: SessionData[], config?: CurveBuilderConfig): {
73
- lcp: ConversionCurve;
74
- inp: ConversionCurve;
75
- cls: ConversionCurve;
76
- };
73
+ export declare function buildAllCurves(sessions: SessionData[], config?: CurveBuilderConfig): Record<PerformanceMetric, ConversionCurve>;
77
74
  /**
78
75
  * Build curves segmented by device or page type.
79
76
  */
@@ -1 +1 @@
1
- {"version":3,"file":"conversion-curve.d.ts","sourceRoot":"","sources":["../../src/empirical/conversion-curve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAM9D,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC9B,sCAAsC;IACtC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yBAAyB;IACzB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,mDAAmD;QACnD,SAAS,EAAE,MAAM,CAAC;QAClB,mEAAmE;QACnE,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,+CAA+C;IAC/C,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oEAAoE;IACpE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,qEAAqE;IACrE,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAgBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAC7B,MAAM,GAAE,kBAAuB,GAC9B,eAAe,CA0GjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,GAAE,kBAAuB,GAC9B;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,CAMtE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,QAAQ,GAAG,WAAW,EACjC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAC7B,MAAM,GAAE,kBAAuB,GAC9B,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAiB9B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG;IAC3D,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CA0CP;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAS3E"}
1
+ {"version":3,"file":"conversion-curve.d.ts","sourceRoot":"","sources":["../../src/empirical/conversion-curve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAM9D,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,sCAAsC;IACtC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yBAAyB;IACzB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,mDAAmD;QACnD,SAAS,EAAE,MAAM,CAAC;QAClB,mEAAmE;QACnE,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,2CAA2C;IAC3C,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oEAAoE;IACpE,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,qEAAqE;IACrE,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAiBD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC;AAMxG;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,iBAAiB,EACzB,MAAM,GAAE,kBAAuB,GAC9B,eAAe,CA0GjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAW5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,QAAQ,GAAG,WAAW,EACjC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAC7B,MAAM,GAAE,kBAAuB,GAC9B,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAiB9B;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG;IAC3D,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CA0CP;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAS3E"}
@@ -10,10 +10,15 @@
10
10
  // =============================================================================
11
11
  // CWV THRESHOLDS
12
12
  // =============================================================================
13
- const CWV_THRESHOLDS = {
13
+ const PERF_THRESHOLDS = {
14
14
  lcp: { good: 2500, needsImprovement: 4000 },
15
+ fcp: { good: 1800, needsImprovement: 3000 },
15
16
  inp: { good: 200, needsImprovement: 500 },
16
17
  cls: { good: 0.1, needsImprovement: 0.25 },
18
+ ttfb: { good: 800, needsImprovement: 1800 },
19
+ tti: { good: 3800, needsImprovement: 7300 },
20
+ onload: { good: 3000, needsImprovement: 6000 },
21
+ page_size: { good: 3000, needsImprovement: 6000 }, // KB - 3MB good, 6MB needs improvement
17
22
  };
18
23
  // =============================================================================
19
24
  // CURVE BUILDER
@@ -107,19 +112,24 @@ export function buildConversionCurve(sessions, metric, config = {}) {
107
112
  relative_cvr_drop: relativeCvrDrop,
108
113
  },
109
114
  thresholds: {
110
- good: CWV_THRESHOLDS[metric].good,
111
- needs_improvement: CWV_THRESHOLDS[metric].needsImprovement,
115
+ good: PERF_THRESHOLDS[metric].good,
116
+ needs_improvement: PERF_THRESHOLDS[metric].needsImprovement,
112
117
  },
113
118
  };
114
119
  }
115
120
  /**
116
- * Build curves for all CWV metrics at once.
121
+ * Build curves for all performance metrics at once.
117
122
  */
118
123
  export function buildAllCurves(sessions, config = {}) {
119
124
  return {
120
125
  lcp: buildConversionCurve(sessions, 'lcp', config),
126
+ fcp: buildConversionCurve(sessions, 'fcp', config),
121
127
  inp: buildConversionCurve(sessions, 'inp', config),
122
128
  cls: buildConversionCurve(sessions, 'cls', config),
129
+ ttfb: buildConversionCurve(sessions, 'ttfb', config),
130
+ tti: buildConversionCurve(sessions, 'tti', config),
131
+ onload: buildConversionCurve(sessions, 'onload', config),
132
+ page_size: buildConversionCurve(sessions, 'page_size', config),
123
133
  };
124
134
  }
125
135
  /**
@@ -200,10 +210,20 @@ function getMetricExtractor(metric) {
200
210
  switch (metric) {
201
211
  case 'lcp':
202
212
  return (s) => s.lcp_ms;
213
+ case 'fcp':
214
+ return (s) => s.fcp_ms;
203
215
  case 'inp':
204
216
  return (s) => s.inp_ms;
205
217
  case 'cls':
206
218
  return (s) => (s.cls !== null ? s.cls * 1000 : null); // Scale CLS to ms-like for bucketing
219
+ case 'ttfb':
220
+ return (s) => s.ttfb_ms;
221
+ case 'tti':
222
+ return (s) => s.tti_ms;
223
+ case 'onload':
224
+ return (s) => s.onload_ms;
225
+ case 'page_size':
226
+ return (s) => s.page_size_kb;
207
227
  }
208
228
  }
209
229
  function getDefaultBoundaries(metric) {
@@ -211,11 +231,24 @@ function getDefaultBoundaries(metric) {
211
231
  case 'lcp':
212
232
  // CWV thresholds + finer granularity
213
233
  return [1000, 1500, 2000, 2500, 3000, 3500, 4000, 5000, 6000];
234
+ case 'fcp':
235
+ // FCP thresholds (good < 1.8s, needs improvement < 3s)
236
+ return [500, 1000, 1500, 1800, 2200, 2600, 3000, 4000];
214
237
  case 'inp':
215
238
  return [50, 100, 150, 200, 300, 400, 500, 750];
216
239
  case 'cls':
217
240
  // CLS scaled by 1000 (so 0.1 = 100, 0.25 = 250)
218
241
  return [25, 50, 75, 100, 150, 200, 250, 350];
242
+ case 'ttfb':
243
+ return [200, 400, 600, 800, 1000, 1500, 2000, 3000];
244
+ case 'tti':
245
+ // TTI thresholds (good < 3.8s, needs improvement < 7.3s)
246
+ return [2000, 3000, 3800, 5000, 6000, 7300, 9000, 12000];
247
+ case 'onload':
248
+ return [1500, 2000, 2500, 3000, 4000, 5000, 6000, 8000];
249
+ case 'page_size':
250
+ // Page size in KB (up to 10MB+)
251
+ return [1000, 2000, 3000, 4000, 5000, 6000, 8000, 10000];
219
252
  }
220
253
  }
221
254
  function findBucket(value, boundaries) {
@@ -1 +1 @@
1
- {"version":3,"file":"conversion-curve.js","sourceRoot":"","sources":["../../src/empirical/conversion-curve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversion-curve.js","sourceRoot":"","sources":["../../src/empirical/conversion-curve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Correlation Analysis
3
+ *
4
+ * Analyzes correlations between performance metrics and conversions:
5
+ * - Point-biserial correlation (continuous metric vs binary conversion)
6
+ * - Inter-metric correlations (how metrics relate to each other)
7
+ * - Feature importance ranking
8
+ *
9
+ * @author Kanmi Obasa <i@kanmiobasa.com>
10
+ */
11
+ import type { SessionData } from './datadog-session-query.js';
12
+ import type { PerformanceMetric } from './conversion-curve.js';
13
+ export interface CorrelationResult {
14
+ /** Metric being correlated */
15
+ metric: string;
16
+ /** Correlation coefficient (-1 to 1) */
17
+ correlation: number;
18
+ /** P-value for significance test */
19
+ p_value: number;
20
+ /** Is the correlation significant? */
21
+ is_significant: boolean;
22
+ /** Direction of correlation */
23
+ direction: 'positive' | 'negative' | 'none';
24
+ /** Interpretation */
25
+ interpretation: string;
26
+ }
27
+ export interface CorrelationMatrix {
28
+ /** Row/column labels */
29
+ metrics: string[];
30
+ /** Correlation values (metrics.length x metrics.length) */
31
+ values: number[][];
32
+ }
33
+ export interface MetricImportance {
34
+ /** Metric name */
35
+ metric: string;
36
+ /** Importance score (0-1) based on correlation with conversion */
37
+ importance: number;
38
+ /** Rank (1 = most important) */
39
+ rank: number;
40
+ /** Direction of impact */
41
+ direction: 'negative' | 'positive';
42
+ /** Insight */
43
+ insight: string;
44
+ }
45
+ export interface CorrelationReport {
46
+ /** Correlations with conversion outcome */
47
+ conversion_correlations: CorrelationResult[];
48
+ /** Inter-metric correlation matrix */
49
+ metric_correlations: CorrelationMatrix;
50
+ /** Metrics ranked by importance */
51
+ importance_ranking: MetricImportance[];
52
+ /** Summary insights */
53
+ summary: {
54
+ most_impactful_metric: string;
55
+ strongest_correlation: number;
56
+ key_insight: string;
57
+ };
58
+ }
59
+ /**
60
+ * Calculate point-biserial correlation between a continuous variable and binary outcome.
61
+ * Used for metric-conversion correlations.
62
+ */
63
+ export declare function pointBiserialCorrelation(continuousValues: number[], binaryOutcomes: boolean[]): {
64
+ correlation: number;
65
+ pValue: number;
66
+ };
67
+ /**
68
+ * Calculate Pearson correlation between two continuous variables.
69
+ */
70
+ export declare function pearsonCorrelation(x: number[], y: number[]): number;
71
+ /**
72
+ * Calculate correlations between a metric and conversion outcome.
73
+ */
74
+ export declare function calculateMetricConversionCorrelation(sessions: SessionData[], metric: PerformanceMetric, eventName?: string): CorrelationResult;
75
+ /**
76
+ * Calculate correlation matrix between all metrics.
77
+ */
78
+ export declare function calculateMetricCorrelationMatrix(sessions: SessionData[]): CorrelationMatrix;
79
+ /**
80
+ * Calculate metric importance ranking based on correlation with conversions.
81
+ */
82
+ export declare function calculateMetricImportance(sessions: SessionData[], eventName?: string): MetricImportance[];
83
+ /**
84
+ * Generate a complete correlation report.
85
+ */
86
+ export declare function generateCorrelationReport(sessions: SessionData[], eventName?: string): CorrelationReport;
87
+ /**
88
+ * Generate markdown report for correlation analysis.
89
+ */
90
+ export declare function generateCorrelationMarkdown(report: CorrelationReport): string;
91
+ //# sourceMappingURL=correlation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correlation.d.ts","sourceRoot":"","sources":["../../src/empirical/correlation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM/D,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,cAAc,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC5C,qBAAqB;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,sCAAsC;IACtC,mBAAmB,EAAE,iBAAiB,CAAC;IACvC,mCAAmC;IACnC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IACvC,uBAAuB;IACvB,OAAO,EAAE;QACP,qBAAqB,EAAE,MAAM,CAAC;QAC9B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,cAAc,EAAE,OAAO,EAAE,GACxB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkDzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAyBnE;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,iBAAiB,EACzB,SAAS,GAAE,MAAmB,GAC7B,iBAAiB,CA6CnB;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,WAAW,EAAE,GACtB,iBAAiB,CAwCnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,GAAE,MAAmB,GAC7B,gBAAgB,EAAE,CAqCpB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,GAAE,MAAmB,GAC7B,iBAAiB,CAuCnB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAiF7E"}