38980-vm/app-9w9pd00g5j41/PERSONA_ENGINE_REFERENCE.md
2026-03-04 18:25:09 +00:00

8.2 KiB
Raw Permalink Blame History

Persona Engine Quick Reference

Signal Weights Reference

Romantic Couple (💑) - Very High Spend

Signal Weight Condition
has_balloon 0.4 Balloon + 2 travelers
has_wine_tasting 0.35 Wine/tasting activities
has_sunset_viewpoint 0.25 2+ viewpoints + dawn
is_couple 0.3 Exactly 2 travelers
has_dawn_activities 0.2 Dawn time block
interest_romantic 0.3 Romantic keywords

Keywords: romantic, romantik, honeymoon, balayı, couple, çift


Luxury Traveler () - Very High Spend

Signal Weight Condition
has_private_balloon 0.5 Private + balloon
interest_luxury 0.4 Luxury keywords
interest_gastronomy 0.25 Food/gastro keywords
has_private_tour 0.35 Private/özel activities
short_trip_many_activities 0.2 ≤3 days, ≥4 activities/day, ≤3 travelers

Keywords: luxury, lüks, premium, vip, exclusive, özel, gastro, food, yemek


Budget Backpacker (🎒) - Low Spend

Signal Weight Condition
interest_budget 0.4 Budget keywords
has_group_tour 0.3 Group tour activities
large_group 0.25 5-10 travelers
interest_hiking 0.2 Hiking/trekking keywords
long_trip_few_paid 0.2 Long trip, few paid activities

Keywords: budget, bütçe, cheap, ucuz, hiking, trek, yürüyüş, group, grup


Content Creator (📸) - High Spend

Signal Weight Condition
interest_photography 0.45 Photography keywords
interest_drone 0.5 Drone keywords
has_sunrise_balloon 0.35 Balloon + dawn activities
interest_instagram 0.4 Social media keywords
many_viewpoints 0.3 3+ viewpoints

Keywords: photo, fotoğraf, drone, instagram, content, sosyal medya, viewpoint, panorama, manzara


Family Explorer (👨‍👩‍👧‍👦) - Medium Spend

Signal Weight Condition
family_size 0.3 3-6 travelers, no budget/private balloon

Keywords: family, aile, kids, çocuk, children


Solo Adventurer (🧗) - Medium Spend

Signal Weight Condition
solo_travel 0.4 1 traveler

Keywords: solo, tek başına, adventure, macera


Group Tour (👥) - High Spend (Total)

Signal Weight Condition
very_large_group 0.5 10+ travelers
has_group_activities 0.35 Group activity types

Keywords: group, grup, friends, arkadaş, tour


Confidence Score Formula

confidence = min(maxScore / (totalScore * 0.6), 1.0)
  • maxScore: Highest individual persona score
  • totalScore: Sum of all persona scores
  • Result: 0.0 - 1.0 (rounded to 2 decimals)
  • Default: 0.3 (when no signals detected)

Usage Examples

Example 1: Romantic Couple

const input = {
  number_of_travelers: 2,
  interests: ['romantic', 'photography'],
  planned_activities: [
    { name: 'Hot Air Balloon', type: 'balloon', time_block: 'dawn' },
    { name: 'Wine Tasting', type: 'tasting' },
    { name: 'Sunset Viewpoint', type: 'viewpoint' }
  ],
  start_date: '2026-06-01',
  end_date: '2026-06-03'
};

// Result:
// Persona: romantic_couple
// Confidence: ~0.85
// Signals: ['Çift + Balon', '2 kişilik seyahat', 'Gün doğumu aktivitesi', 'Şarap tadımı', 'Romantik ilgi alanı']

Example 2: Content Creator

const input = {
  number_of_travelers: 1,
  interests: ['photography', 'drone', 'instagram'],
  planned_activities: [
    { name: 'Sunrise Balloon', type: 'balloon', time_block: 'dawn' },
    { name: 'Love Valley Viewpoint', type: 'viewpoint' },
    { name: 'Uchisar Castle Viewpoint', type: 'viewpoint' },
    { name: 'Pigeon Valley Panorama', type: 'viewpoint' }
  ],
  start_date: '2026-06-01',
  end_date: '2026-06-04'
};

// Result:
// Persona: content_creator
// Confidence: ~0.92
// Signals: ['Gün doğumu balonu', '3 panorama noktası', 'Fotoğrafçılık ilgisi', 'Drone kullanımı', 'Sosyal medya / içerik üretimi']

Example 3: Luxury Traveler

const input = {
  number_of_travelers: 2,
  interests: ['luxury', 'gastronomy'],
  planned_activities: [
    { name: 'Private Hot Air Balloon', type: 'private_balloon' },
    { name: 'Private Cave Hotel Tour', type: 'private_tour' },
    { name: 'Fine Dining Experience', type: 'restaurant' }
  ],
  start_date: '2026-06-01',
  end_date: '2026-06-02'
};

// Result:
// Persona: luxury_traveler
// Confidence: ~0.95
// Signals: ['Özel balon turu', 'Özel tur aktivitesi', 'Lüks ilgi alanı', 'Gastronomi ilgisi', 'Yoğun kısa seyahat']

Admin Dashboard Usage

High-Value Leads Query

SELECT * FROM get_high_value_leads();

Returns leads with:

  • Spend potential: high or very_high
  • Confidence: ≥ 0.7
  • Status: new
  • Sorted by: spend potential DESC, confidence DESC, created_at DESC

Persona Statistics Query

SELECT * FROM get_persona_statistics();

Returns:

  • persona_type
  • count (number of leads)
  • avg_confidence (average confidence score)
  • avg_travelers (average number of travelers)

Provider Dashboard Features

Persona Badge Display

  • Compact Mode: Shows emoji, label, confidence in table view
  • Detailed Mode: Shows full persona info in lead detail modal
  • Language: Turkish for providers, English for admins
  • Color Coding: Spend potential color-coded (purple = very_high, green = high, blue = medium, gray = low)

Lead Prioritization

Providers should prioritize leads in this order:

  1. Very High Spend (💑 Romantic Couple, Luxury Traveler) - Confidence ≥ 0.7
  2. High Spend (📸 Content Creator, 👥 Group Tour) - Confidence ≥ 0.6
  3. Medium Spend (👨‍👩‍👧‍👦 Family Explorer, 🧗 Solo Adventurer) - Confidence ≥ 0.5
  4. Low Spend (🎒 Budget Backpacker) - All confidence levels

Tuning Guide

Adjusting Signal Weights

To increase/decrease persona detection sensitivity:

  1. Increase Weight - Make signal more important

    has_private_balloon: { type: 'luxury_traveler', weight: 0.6 } // was 0.5
    
  2. Decrease Weight - Make signal less important

    interest_budget: { type: 'budget_backpacker', weight: 0.3 } // was 0.4
    
  3. Add New Signal - Create new detection rule

    has_spa_activity: { type: 'romantic_couple', weight: 0.25 }
    

Adjusting Confidence Threshold

To change minimum confidence for high-value leads:

-- In get_high_value_leads() function
WHERE l.persona_confidence >= 0.8  -- was 0.7

Troubleshooting

Low Confidence Scores

Problem: All leads getting low confidence (< 0.5)

Solutions:

  1. Check if activities have type field populated
  2. Verify interests array is not empty
  3. Add more keywords to signal detection
  4. Adjust confidence formula divisor (0.6 → 0.5)

Wrong Persona Detection

Problem: Leads assigned to wrong persona

Solutions:

  1. Review detected signals in lead detail modal
  2. Adjust signal weights for competing personas
  3. Add more specific keywords
  4. Check for keyword conflicts (e.g., "budget luxury")

Missing Signals

Problem: Expected signals not detected

Solutions:

  1. Verify activity names/types contain keywords
  2. Check for typos in keywords
  3. Add Turkish/English variations
  4. Use lowercase comparison (already implemented)

Best Practices

For Developers

  1. Always test persona detection with real trip data
  2. Monitor confidence score distribution
  3. Track conversion rates by persona
  4. Adjust weights based on business feedback
  5. Keep signal definitions centralized
  6. Document any weight changes

For Admins

  1. Review persona statistics weekly
  2. Identify underperforming personas
  3. Adjust lead pricing based on persona
  4. Train providers on persona characteristics
  5. Monitor high-value lead conversion rates
  6. Use persona data for marketing insights

For Providers

  1. Read key signals to understand customer needs
  2. Tailor communication based on persona
  3. Offer recommended services first
  4. Adjust pricing based on spend potential
  5. Track which personas convert best
  6. Provide feedback on persona accuracy