kanmi-perf-revenue 1.0.0 → 1.2.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 (94) hide show
  1. package/README.md +347 -173
  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-product-analytics.d.ts +192 -0
  31. package/dist/empirical/datadog-product-analytics.d.ts.map +1 -0
  32. package/dist/empirical/datadog-product-analytics.js +632 -0
  33. package/dist/empirical/datadog-product-analytics.js.map +1 -0
  34. package/dist/empirical/datadog-session-query.d.ts +32 -0
  35. package/dist/empirical/datadog-session-query.d.ts.map +1 -1
  36. package/dist/empirical/datadog-session-query.js +238 -17
  37. package/dist/empirical/datadog-session-query.js.map +1 -1
  38. package/dist/empirical/engagement-analysis.d.ts +112 -0
  39. package/dist/empirical/engagement-analysis.d.ts.map +1 -0
  40. package/dist/empirical/engagement-analysis.js +354 -0
  41. package/dist/empirical/engagement-analysis.js.map +1 -0
  42. package/dist/empirical/export.d.ts +75 -0
  43. package/dist/empirical/export.d.ts.map +1 -0
  44. package/dist/empirical/export.js +392 -0
  45. package/dist/empirical/export.js.map +1 -0
  46. package/dist/empirical/forecasting.d.ts +80 -0
  47. package/dist/empirical/forecasting.d.ts.map +1 -0
  48. package/dist/empirical/forecasting.js +287 -0
  49. package/dist/empirical/forecasting.js.map +1 -0
  50. package/dist/empirical/funnel.d.ts +66 -0
  51. package/dist/empirical/funnel.d.ts.map +1 -0
  52. package/dist/empirical/funnel.js +293 -0
  53. package/dist/empirical/funnel.js.map +1 -0
  54. package/dist/empirical/history.d.ts +198 -0
  55. package/dist/empirical/history.d.ts.map +1 -0
  56. package/dist/empirical/history.js +396 -0
  57. package/dist/empirical/history.js.map +1 -0
  58. package/dist/empirical/index.d.ts +41 -16
  59. package/dist/empirical/index.d.ts.map +1 -1
  60. package/dist/empirical/index.js +96 -13
  61. package/dist/empirical/index.js.map +1 -1
  62. package/dist/empirical/interactions.d.ts +89 -0
  63. package/dist/empirical/interactions.d.ts.map +1 -0
  64. package/dist/empirical/interactions.js +346 -0
  65. package/dist/empirical/interactions.js.map +1 -0
  66. package/dist/empirical/opportunity-calculator.d.ts +6 -18
  67. package/dist/empirical/opportunity-calculator.d.ts.map +1 -1
  68. package/dist/empirical/opportunity-calculator.js +19 -1
  69. package/dist/empirical/opportunity-calculator.js.map +1 -1
  70. package/dist/empirical/report.d.ts +3 -11
  71. package/dist/empirical/report.d.ts.map +1 -1
  72. package/dist/empirical/report.js +11 -7
  73. package/dist/empirical/report.js.map +1 -1
  74. package/dist/empirical/roi-calculator.d.ts +104 -0
  75. package/dist/empirical/roi-calculator.d.ts.map +1 -0
  76. package/dist/empirical/roi-calculator.js +403 -0
  77. package/dist/empirical/roi-calculator.js.map +1 -0
  78. package/dist/empirical/seasonality.d.ts +80 -0
  79. package/dist/empirical/seasonality.d.ts.map +1 -0
  80. package/dist/empirical/seasonality.js +340 -0
  81. package/dist/empirical/seasonality.js.map +1 -0
  82. package/dist/empirical/segmentation.d.ts +135 -0
  83. package/dist/empirical/segmentation.d.ts.map +1 -0
  84. package/dist/empirical/segmentation.js +379 -0
  85. package/dist/empirical/segmentation.js.map +1 -0
  86. package/dist/empirical/statistics.d.ts +118 -0
  87. package/dist/empirical/statistics.d.ts.map +1 -0
  88. package/dist/empirical/statistics.js +344 -0
  89. package/dist/empirical/statistics.js.map +1 -0
  90. package/dist/empirical/sweet-spot.d.ts +81 -0
  91. package/dist/empirical/sweet-spot.d.ts.map +1 -0
  92. package/dist/empirical/sweet-spot.js +198 -0
  93. package/dist/empirical/sweet-spot.js.map +1 -0
  94. package/package.json +2 -2
@@ -15,38 +15,30 @@
15
15
  * const result = await analyzeWithDatadog({
16
16
  * apiKey: 'xxx',
17
17
  * appKey: 'xxx',
18
- * startDate: '2024-01-01',
19
- * endDate: '2024-01-14',
18
+ * startDate: '2025-01-01',
19
+ * endDate: '2025-01-14',
20
20
  * });
21
21
  *
22
22
  * // With mock data (for testing)
23
23
  * const result = analyzeWithMockData({
24
24
  * sessionCount: 50000,
25
- * startDate: '2024-01-01',
26
- * endDate: '2024-01-14',
25
+ * startDate: '2025-01-01',
26
+ * endDate: '2025-01-14',
27
27
  * });
28
28
  *
29
29
  * @author Kanmi Obasa <i@kanmiobasa.com>
30
30
  */
31
31
  import { type DatadogQueryConfig } from './datadog-session-query.js';
32
- import { type ConversionCurve } from './conversion-curve.js';
32
+ import { type ConversionCurve, type PerformanceMetric } from './conversion-curve.js';
33
33
  import { type OpportunityReport } from './opportunity-calculator.js';
34
34
  export interface AnalysisResult {
35
35
  /** Empirical conversion curves */
36
- curves: {
37
- lcp: ConversionCurve;
38
- inp: ConversionCurve;
39
- cls: ConversionCurve;
40
- };
36
+ curves: Record<PerformanceMetric, ConversionCurve>;
41
37
  /** Revenue opportunity analysis */
42
- opportunities: {
43
- lcp: OpportunityReport;
44
- inp: OpportunityReport;
45
- cls: OpportunityReport;
46
- };
38
+ opportunities: Record<PerformanceMetric, OpportunityReport>;
47
39
  /** The single highest-impact opportunity */
48
40
  topOpportunity: {
49
- metric: 'lcp' | 'inp' | 'cls';
41
+ metric: PerformanceMetric;
50
42
  monthlyRevenue: number;
51
43
  summary: string;
52
44
  } | null;
@@ -101,9 +93,42 @@ export type { SessionData, DatadogQueryConfig, QueryResult } from './datadog-ses
101
93
  export type { ConversionCurve, ConversionBucket, CurveBuilderConfig } from './conversion-curve.js';
102
94
  export type { OpportunityReport, OpportunityScenario, OpportunityConfig } from './opportunity-calculator.js';
103
95
  export type { ReportConfig, FullReport } from './report.js';
96
+ export type { HistoricalEntry, PeriodComparison } from './history.js';
97
+ export type { EngagementBucket, EngagementCurve, EngagementOpportunity, EngagementReport, EngagementConfig, } from './engagement-analysis.js';
98
+ export type { SegmentStats, SegmentComparison, SegmentationReport, EventStats, SegmentType, } from './segmentation.js';
99
+ export type { ConfidenceInterval, ProportionTest, SampleSizeRecommendation, EffectSize, } from './statistics.js';
100
+ export type { CorrelationResult, CorrelationMatrix, MetricImportance, CorrelationReport, } from './correlation.js';
101
+ export type { MetricName, MetricThresholds, InteractionCell, MetricInteraction, InteractionReport, } from './interactions.js';
102
+ export type { HourlyPattern, DayOfWeekPattern, WeeklyTrend, SeasonalityReport, SeasonalInsight, } from './seasonality.js';
103
+ export type { FunnelStage, FunnelStageStats, FunnelStep, FunnelReport, } from './funnel.js';
104
+ export type { EngineeringCost, PerformanceImprovement, ROIAnalysis, ROIComparison, } from './roi-calculator.js';
105
+ export type { ImprovementScenario, ForecastPeriod, RevenueForecast, MultiForecast, } from './forecasting.js';
106
+ export type { CohortType, PerformanceCohort, TimeCohort, CohortAnalysis, } from './cohort.js';
107
+ export type { ABTestVariant, ABTestComparison, ABTestReport, } from './ab-testing.js';
108
+ export type { AttributionModel, TouchpointStats, UserJourney, AttributionReport, } from './attribution.js';
109
+ export type { AlertSeverity, AlertType, AlertThreshold, Alert, AlertConfig, AlertReport, } from './alerting.js';
110
+ export type { ExportOptions, SlackBlock, SlackMessage, EmailTemplate, } from './export.js';
104
111
  export { queryDatadogSessions, generateMockSessions } from './datadog-session-query.js';
112
+ export type { ConversionEvent } from './datadog-session-query.js';
105
113
  export { buildConversionCurve, buildAllCurves, buildSegmentedCurves } from './conversion-curve.js';
106
114
  export { calculateOpportunity, calculateAllOpportunities, getTopOpportunity } from './opportunity-calculator.js';
107
115
  export { generateReport } from './report.js';
108
116
  export { importFromFile, importFromCsv, importFromJson } from './data-import.js';
117
+ export { HistoryManager, generateComparisonReport } from './history.js';
118
+ export { buildEngagementCurve, buildAllEngagementCurves, calculateEngagementOpportunity, generateEngagementReport, generateEngagementMarkdownReport, } from './engagement-analysis.js';
119
+ export { analyzeBySegment, compareSegments, analyzeEvents, generateSegmentationReport, generateSegmentationMarkdown, } from './segmentation.js';
120
+ export { calculateConfidenceInterval, calculateDifferenceCI, twoProportionZTest, calculateEffectSize, calculateRequiredSampleSize, isSampleSufficient, bonferroniCorrection, benjaminiHochbergCorrection, } from './statistics.js';
121
+ export { pointBiserialCorrelation, pearsonCorrelation, calculateMetricConversionCorrelation, calculateMetricCorrelationMatrix, calculateMetricImportance, generateCorrelationReport, generateCorrelationMarkdown, } from './correlation.js';
122
+ export { analyzeMetricInteraction, analyzeAllInteractions, generateInteractionMarkdown, } from './interactions.js';
123
+ export { analyzeHourlyPatterns, analyzeDayOfWeekPatterns, analyzeWeeklyTrends, analyzeSeasonality, generateSeasonalityMarkdown, } from './seasonality.js';
124
+ export { inferFunnelStage, inferDeepestStage, analyzeFunnel, generateFunnelMarkdown, } from './funnel.js';
125
+ export { DEFAULT_COSTS, IMPROVEMENT_TEMPLATES, estimateCvrLift, calculateROI, compareROI, estimateROIFromOpportunity, generateROIMarkdown, generateROIComparisonMarkdown, } from './roi-calculator.js';
126
+ export { forecastRevenue, forecastMultipleImprovements, generateForecastMarkdown, generateMultiForecastMarkdown, } from './forecasting.js';
127
+ export { analyzePerformanceCohorts, analyzeTimeCohorts, generateCohortMarkdown, } from './cohort.js';
128
+ export { analyzeABTest, createPerformanceExperiment, generateABTestMarkdown, } from './ab-testing.js';
129
+ export { buildUserJourneys, calculateAttribution, analyzePerformanceInfluence, generateAttributionReport, generateAttributionMarkdown, } from './attribution.js';
130
+ export { DEFAULT_THRESHOLDS, DEFAULT_ALERT_CONFIG, checkThresholds, detectRegressions, detectAnomalies, detectOpportunities, generateAlertReport, generateAlertMarkdown, } from './alerting.js';
131
+ export { exportToJson, exportOpportunitiesToCsv, exportCurvesToCsv, exportToSlack, exportAlertsToSlack, exportToEmail, exportToWebhook, exportAlertWebhook, } from './export.js';
132
+ export type { ProductAnalyticsConfig, FrustrationSignals, EnhancedSessionData, UserAction, SessionError, FunnelStep as ProductAnalyticsFunnelStep, FunnelResult as ProductAnalyticsFunnelResult, FunnelStepResult, CohortDefinition, RetentionResult, RetentionPeriod, JourneyNode, UserJourneyMap, } from './datadog-product-analytics.js';
133
+ export { queryEnhancedSessions, queryFunnel, analyzeFunnelPerformanceImpact, queryCohortRetention, buildUserJourneyMap, analyzeFrustrationImpact, generateProductAnalyticsMarkdown, } from './datadog-product-analytics.js';
109
134
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/empirical/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/empirical/index.ts"],"names":[],"mappings":"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"}
@@ -15,15 +15,15 @@
15
15
  * const result = await analyzeWithDatadog({
16
16
  * apiKey: 'xxx',
17
17
  * appKey: 'xxx',
18
- * startDate: '2024-01-01',
19
- * endDate: '2024-01-14',
18
+ * startDate: '2025-01-01',
19
+ * endDate: '2025-01-14',
20
20
  * });
21
21
  *
22
22
  * // With mock data (for testing)
23
23
  * const result = analyzeWithMockData({
24
24
  * sessionCount: 50000,
25
- * startDate: '2024-01-01',
26
- * endDate: '2024-01-14',
25
+ * startDate: '2025-01-01',
26
+ * endDate: '2025-01-14',
27
27
  * });
28
28
  *
29
29
  * @author Kanmi Obasa <i@kanmiobasa.com>
@@ -33,6 +33,7 @@ import { buildAllCurves } from './conversion-curve.js';
33
33
  import { calculateAllOpportunities, getTopOpportunity, } from './opportunity-calculator.js';
34
34
  import { generateReport } from './report.js';
35
35
  import { importFromFile } from './data-import.js';
36
+ import { HistoryManager, generateComparisonReport } from './history.js';
36
37
  // =============================================================================
37
38
  // MAIN ANALYSIS FUNCTIONS
38
39
  // =============================================================================
@@ -128,9 +129,39 @@ export async function main() {
128
129
  printHelp();
129
130
  return;
130
131
  }
132
+ const history = new HistoryManager();
133
+ // Check for history commands
134
+ if (args.includes('--history')) {
135
+ const entries = history.getAll();
136
+ if (entries.length === 0) {
137
+ console.log('No historical entries. Run an analysis with --save to start tracking.');
138
+ return;
139
+ }
140
+ console.log('# Analysis History\n');
141
+ for (const entry of entries.slice(-10)) {
142
+ const tags = entry.tags?.length ? ` [${entry.tags.join(', ')}]` : '';
143
+ console.log(`${entry.id} ${entry.period.start} to ${entry.period.end} CVR: ${(entry.metrics.overallCvr * 100).toFixed(2)}%${tags}`);
144
+ }
145
+ return;
146
+ }
147
+ if (args.includes('--trend')) {
148
+ const metric = (getArg(args, '--metric') || 'lcp');
149
+ const trend = history.getTrend(metric);
150
+ console.log(`# ${metric.toUpperCase()} Trend\n`);
151
+ console.log(`Trend: ${trend.trend}\n`);
152
+ console.log('| Date | Good CVR | Overall CVR |');
153
+ console.log('|------|----------|-------------|');
154
+ for (const e of trend.entries) {
155
+ console.log(`| ${e.date} | ${(e.goodCvr * 100).toFixed(2)}% | ${(e.overallCvr * 100).toFixed(2)}% |`);
156
+ }
157
+ return;
158
+ }
131
159
  // Check for file import mode
132
160
  const filePath = getArg(args, '--file');
133
161
  const clientName = getArg(args, '--client');
162
+ const shouldSave = args.includes('--save');
163
+ const saveTag = getArg(args, '--tag');
164
+ const compareToBaseline = args.includes('--compare');
134
165
  if (filePath) {
135
166
  console.log(`Importing data from ${filePath}...\n`);
136
167
  try {
@@ -142,6 +173,21 @@ export async function main() {
142
173
  });
143
174
  console.log(result.report);
144
175
  printSummary(result);
176
+ // Save to history if requested
177
+ if (shouldSave) {
178
+ const entry = history.save(result, { tags: saveTag ? [saveTag] : undefined });
179
+ console.log(`\nSaved to history: ${entry.id}`);
180
+ }
181
+ // Compare to baseline if requested
182
+ if (compareToBaseline) {
183
+ const comparison = history.compareToBaseline(result);
184
+ if (comparison) {
185
+ console.log('\n' + generateComparisonReport(comparison));
186
+ }
187
+ else {
188
+ console.log('\nNo baseline found. Run with --save --tag baseline first.');
189
+ }
190
+ }
145
191
  return;
146
192
  }
147
193
  catch (error) {
@@ -155,13 +201,23 @@ export async function main() {
155
201
  console.log('Running in demo mode with mock data...\n');
156
202
  const result = analyzeWithMockData({
157
203
  sessionCount: 50000,
158
- startDate: '2024-01-01',
159
- endDate: '2024-01-14',
204
+ startDate: '2025-01-01',
205
+ endDate: '2025-01-14',
160
206
  clientName: clientName || 'Demo Company',
161
207
  baseConversionRate: 0.03,
162
208
  });
163
209
  console.log(result.report);
164
210
  printSummary(result);
211
+ if (shouldSave) {
212
+ const entry = history.save(result, { tags: saveTag ? [saveTag] : undefined });
213
+ console.log(`\nSaved to history: ${entry.id}`);
214
+ }
215
+ if (compareToBaseline) {
216
+ const comparison = history.compareToBaseline(result);
217
+ if (comparison) {
218
+ console.log('\n' + generateComparisonReport(comparison));
219
+ }
220
+ }
165
221
  return;
166
222
  }
167
223
  // Check for Datadog credentials
@@ -201,7 +257,7 @@ function printHelp() {
201
257
  Empirical Performance Revenue Engine
202
258
 
203
259
  Usage:
204
- npx tsx src/empirical/index.ts [options]
260
+ kanmi-perf-revenue [options]
205
261
 
206
262
  Data Sources (choose one):
207
263
  --file PATH Import from CSV or JSON file (recommended)
@@ -214,15 +270,26 @@ Options:
214
270
  --client NAME Client name for report header
215
271
  --help, -h Show this help message
216
272
 
273
+ History & Tracking:
274
+ --save Save analysis to history
275
+ --tag TAG Tag the saved entry (e.g., "baseline", "post-fix")
276
+ --compare Compare current result to baseline
277
+ --history Show analysis history
278
+ --trend Show CVR trend over time
279
+ --metric METRIC Metric for trend (lcp, inp, cls). Default: lcp
280
+
217
281
  Examples:
218
- # Import from your own CSV/JSON
219
- npx tsx src/empirical/index.ts --file sessions.csv --client "Acme Corp"
282
+ # Establish baseline
283
+ kanmi-perf-revenue --file week1.csv --save --tag baseline
284
+
285
+ # After performance fix, compare to baseline
286
+ kanmi-perf-revenue --file week2.csv --save --tag post-fix --compare
220
287
 
221
- # Demo with mock data
222
- npx tsx src/empirical/index.ts --demo
288
+ # View trend over time
289
+ kanmi-perf-revenue --trend --metric lcp
223
290
 
224
- # With Datadog credentials
225
- DD_API_KEY=xxx DD_APP_KEY=xxx npx tsx src/empirical/index.ts
291
+ # View history
292
+ kanmi-perf-revenue --history
226
293
 
227
294
  CSV/JSON Format:
228
295
  Required columns: session_id, converted (or has_purchase)
@@ -260,6 +327,22 @@ export { buildConversionCurve, buildAllCurves, buildSegmentedCurves } from './co
260
327
  export { calculateOpportunity, calculateAllOpportunities, getTopOpportunity } from './opportunity-calculator.js';
261
328
  export { generateReport } from './report.js';
262
329
  export { importFromFile, importFromCsv, importFromJson } from './data-import.js';
330
+ export { HistoryManager, generateComparisonReport } from './history.js';
331
+ export { buildEngagementCurve, buildAllEngagementCurves, calculateEngagementOpportunity, generateEngagementReport, generateEngagementMarkdownReport, } from './engagement-analysis.js';
332
+ export { analyzeBySegment, compareSegments, analyzeEvents, generateSegmentationReport, generateSegmentationMarkdown, } from './segmentation.js';
333
+ export { calculateConfidenceInterval, calculateDifferenceCI, twoProportionZTest, calculateEffectSize, calculateRequiredSampleSize, isSampleSufficient, bonferroniCorrection, benjaminiHochbergCorrection, } from './statistics.js';
334
+ export { pointBiserialCorrelation, pearsonCorrelation, calculateMetricConversionCorrelation, calculateMetricCorrelationMatrix, calculateMetricImportance, generateCorrelationReport, generateCorrelationMarkdown, } from './correlation.js';
335
+ export { analyzeMetricInteraction, analyzeAllInteractions, generateInteractionMarkdown, } from './interactions.js';
336
+ export { analyzeHourlyPatterns, analyzeDayOfWeekPatterns, analyzeWeeklyTrends, analyzeSeasonality, generateSeasonalityMarkdown, } from './seasonality.js';
337
+ export { inferFunnelStage, inferDeepestStage, analyzeFunnel, generateFunnelMarkdown, } from './funnel.js';
338
+ export { DEFAULT_COSTS, IMPROVEMENT_TEMPLATES, estimateCvrLift, calculateROI, compareROI, estimateROIFromOpportunity, generateROIMarkdown, generateROIComparisonMarkdown, } from './roi-calculator.js';
339
+ export { forecastRevenue, forecastMultipleImprovements, generateForecastMarkdown, generateMultiForecastMarkdown, } from './forecasting.js';
340
+ export { analyzePerformanceCohorts, analyzeTimeCohorts, generateCohortMarkdown, } from './cohort.js';
341
+ export { analyzeABTest, createPerformanceExperiment, generateABTestMarkdown, } from './ab-testing.js';
342
+ export { buildUserJourneys, calculateAttribution, analyzePerformanceInfluence, generateAttributionReport, generateAttributionMarkdown, } from './attribution.js';
343
+ export { DEFAULT_THRESHOLDS, DEFAULT_ALERT_CONFIG, checkThresholds, detectRegressions, detectAnomalies, detectOpportunities, generateAlertReport, generateAlertMarkdown, } from './alerting.js';
344
+ export { exportToJson, exportOpportunitiesToCsv, exportCurvesToCsv, exportToSlack, exportAlertsToSlack, exportToEmail, exportToWebhook, exportAlertWebhook, } from './export.js';
345
+ export { queryEnhancedSessions, queryFunnel, analyzeFunnelPerformanceImpact, queryCohortRetention, buildUserJourneyMap, analyzeFrustrationImpact, generateProductAnalyticsMarkdown, } from './datadog-product-analytics.js';
263
346
  // Run if executed directly
264
347
  if (import.meta.url === `file://${process.argv[1]}`) {
265
348
  main().catch(console.error);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/empirical/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/empirical/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Multi-Metric Interaction Analysis
3
+ *
4
+ * Analyzes how combinations of performance metrics affect conversion rates.
5
+ * Goes beyond single-metric analysis to find interaction effects.
6
+ *
7
+ * Key insights:
8
+ * - Do users with both good LCP AND good INP convert better than expected?
9
+ * - Are there threshold combinations that matter?
10
+ * - Which metric pairs have synergistic effects?
11
+ *
12
+ * @author Kanmi Obasa <i@kanmiobasa.com>
13
+ */
14
+ import type { SessionData } from './datadog-session-query.js';
15
+ export type MetricName = 'lcp' | 'inp' | 'cls' | 'fcp' | 'ttfb';
16
+ export interface MetricThresholds {
17
+ good: number;
18
+ poor: number;
19
+ }
20
+ export interface InteractionCell {
21
+ /** Metric A value bucket */
22
+ metricABucket: 'good' | 'needs_improvement' | 'poor';
23
+ /** Metric B value bucket */
24
+ metricBBucket: 'good' | 'needs_improvement' | 'poor';
25
+ /** Sessions in this cell */
26
+ sessions: number;
27
+ /** Conversions in this cell */
28
+ conversions: number;
29
+ /** Conversion rate */
30
+ cvr: number;
31
+ /** Expected CVR based on marginals (for interaction effect) */
32
+ expectedCvr: number;
33
+ /** Interaction effect: actual - expected */
34
+ interactionEffect: number;
35
+ /** Is this cell synergistic (better than expected)? */
36
+ synergistic: boolean;
37
+ }
38
+ export interface MetricInteraction {
39
+ /** First metric */
40
+ metricA: MetricName;
41
+ /** Second metric */
42
+ metricB: MetricName;
43
+ /** 3x3 grid of interaction cells */
44
+ grid: InteractionCell[][];
45
+ /** Overall interaction strength */
46
+ interactionStrength: number;
47
+ /** Key insights */
48
+ insights: string[];
49
+ /** Best performing combination */
50
+ bestCombination: {
51
+ metricA: 'good' | 'needs_improvement' | 'poor';
52
+ metricB: 'good' | 'needs_improvement' | 'poor';
53
+ cvr: number;
54
+ lift: number;
55
+ };
56
+ /** Worst performing combination */
57
+ worstCombination: {
58
+ metricA: 'good' | 'needs_improvement' | 'poor';
59
+ metricB: 'good' | 'needs_improvement' | 'poor';
60
+ cvr: number;
61
+ };
62
+ }
63
+ export interface InteractionReport {
64
+ /** All pairwise interactions */
65
+ interactions: MetricInteraction[];
66
+ /** Ranked by interaction strength */
67
+ rankedInteractions: Array<{
68
+ metricA: MetricName;
69
+ metricB: MetricName;
70
+ strength: number;
71
+ }>;
72
+ /** Key findings */
73
+ findings: string[];
74
+ /** Recommendations */
75
+ recommendations: string[];
76
+ }
77
+ /**
78
+ * Analyze interaction between two metrics.
79
+ */
80
+ export declare function analyzeMetricInteraction(sessions: SessionData[], metricA: MetricName, metricB: MetricName): MetricInteraction | null;
81
+ /**
82
+ * Analyze all pairwise metric interactions.
83
+ */
84
+ export declare function analyzeAllInteractions(sessions: SessionData[]): InteractionReport;
85
+ /**
86
+ * Generate markdown report for interaction analysis.
87
+ */
88
+ export declare function generateInteractionMarkdown(report: InteractionReport): string;
89
+ //# sourceMappingURL=interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../src/empirical/interactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAM9D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAC;IACrD,4BAA4B;IAC5B,aAAa,EAAE,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAC;IACrD,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,oBAAoB;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,oCAAoC;IACpC,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC;IAC1B,mCAAmC;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kCAAkC;IAClC,eAAe,EAAE;QACf,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAC;QAC/C,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAC;QAC/C,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,mCAAmC;IACnC,gBAAgB,EAAE;QAChB,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAC;QAC/C,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,MAAM,CAAC;QAC/C,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,qCAAqC;IACrC,kBAAkB,EAAE,KAAK,CAAC;QACxB,OAAO,EAAE,UAAU,CAAC;QACpB,OAAO,EAAE,UAAU,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,mBAAmB;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sBAAsB;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAmDD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,GAClB,iBAAiB,GAAG,IAAI,CA4K1B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAuFjF;AAMD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA2E7E"}