Skip to content

Kurtosis Method

The kurtosis() method calculates the kurtosis (tailedness) of numeric values in the collection. Kurtosis measures whether the data are heavy-tailed or light-tailed compared to a normal distribution. A normal distribution has a kurtosis of 0 (excess kurtosis).

Basic Syntax

typescript
kurtosis<K extends keyof T>(key?: K): number

Examples

Basic Usage

typescript
import { collect } from 'ts-collect'

const numbers = collect([1, 2, 2, 3, 3, 3, 4, 4, 5])
const kurt = numbers.kurtosis()

console.log(kurt)
// Negative value indicates lighter tails than normal distribution

Working with Object Properties

typescript
interface DailyMetric {
  date: string
  value: number
}

const metrics = collect<DailyMetric>([
  { date: '2024-01-01', value: 100 },
  { date: '2024-01-02', value: 105 },
  { date: '2024-01-03', value: 103 },
  { date: '2024-01-04', value: 200 } // outlier
])

const distributionShape = metrics.kurtosis('value')
// Positive value indicates heavier tails due to outlier

Real-world Example: E-commerce Order Analysis

typescript
interface OrderMetrics {
  date: string
  orderCount: number
  averageValue: number
  returnRate: number
}

class OrderDistributionAnalyzer {
  private metrics: Collection<OrderMetrics>

  constructor(metrics: OrderMetrics[]) {
    this.metrics = collect(metrics)
  }

  analyzeSalesDistribution() {
    return {
      orderCountShape: {
        kurtosis: this.metrics.kurtosis('orderCount'),
        interpretation: this.interpretKurtosis(
          this.metrics.kurtosis('orderCount')
        )
      },
      orderValueShape: {
        kurtosis: this.metrics.kurtosis('averageValue'),
        interpretation: this.interpretKurtosis(
          this.metrics.kurtosis('averageValue')
        )
      },
      returnRateShape: {
        kurtosis: this.metrics.kurtosis('returnRate'),
        interpretation: this.interpretKurtosis(
          this.metrics.kurtosis('returnRate')
        )
      }
    }
  }

  private interpretKurtosis(kurtosis: number): string {
    if (Math.abs(kurtosis) < 0.5) {
      return 'Near normal distribution'
    }
    if (kurtosis > 0) {
      return `Heavy-tailed distribution (${kurtosis.toFixed(2)}).
              Suggests frequent extreme values.`
    }
    return `Light-tailed distribution (${kurtosis.toFixed(2)}).
            Suggests consistent values with few extremes.`
  }

  getDistributionAlert(): string | null {
    const orderKurtosis = this.metrics.kurtosis('orderCount')
    const valueKurtosis = this.metrics.kurtosis('averageValue')

    if (orderKurtosis > 2 || valueKurtosis > 2) {
      return 'High number of unusual order patterns detected. Review needed.'
    }
    return null
  }
}

// Usage
const analyzer = new OrderDistributionAnalyzer([
  {
    date: '2024-01-01',
    orderCount: 100,
    averageValue: 50,
    returnRate: 0.05
  },
  {
    date: '2024-01-02',
    orderCount: 500, // unusual spike
    averageValue: 45,
    returnRate: 0.04
  }
])

const analysis = analyzer.analyzeSalesDistribution()

Type Safety

typescript
interface SalesData {
  revenue: number
  category: string
}

const sales = collect<SalesData>([
  { revenue: 1000, category: 'A' },
  { revenue: 1500, category: 'B' }
])

// Type-safe kurtosis calculation
const revenueKurtosis: number = sales.kurtosis('revenue')

// TypeScript enforces numeric fields
// sales.kurtosis('category') // ✗ TypeScript error

Return Value

  • Returns a number representing kurtosis where:
    • = 0: Normal distribution
    • 0: Heavy-tailed (more outliers)

    • < 0: Light-tailed (fewer outliers)
  • Returns NaN for insufficient data
  • Handles undefined values
  • Requires numeric values
  • Maintains type safety
  • Uses excess kurtosis formula (normal = 0)

Common Use Cases

1. Sales Analysis

  • Order value distribution
  • Sales pattern analysis
  • Revenue consistency
  • Seasonal variations
  • Customer behavior

2. Risk Assessment

  • Price volatility
  • Return rate patterns
  • Inventory fluctuations
  • Demand variability
  • Cost distribution

3. Performance Monitoring

  • Response time patterns
  • Load distribution
  • Error rate analysis
  • Resource usage
  • Traffic patterns

4. Quality Control

  • Process variation
  • Product consistency
  • Service level patterns
  • Defect distribution
  • Performance metrics

5. Customer Behavior

  • Purchase frequency
  • Order size patterns
  • Session duration
  • Engagement metrics
  • Activity distribution

Released under the MIT License.