8.2 KiB
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:
- Very High Spend (💑 Romantic Couple, ✨ Luxury Traveler) - Confidence ≥ 0.7
- High Spend (📸 Content Creator, 👥 Group Tour) - Confidence ≥ 0.6
- Medium Spend (👨👩👧👦 Family Explorer, 🧗 Solo Adventurer) - Confidence ≥ 0.5
- Low Spend (🎒 Budget Backpacker) - All confidence levels
Tuning Guide
Adjusting Signal Weights
To increase/decrease persona detection sensitivity:
-
Increase Weight - Make signal more important
has_private_balloon: { type: 'luxury_traveler', weight: 0.6 } // was 0.5 -
Decrease Weight - Make signal less important
interest_budget: { type: 'budget_backpacker', weight: 0.3 } // was 0.4 -
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:
- Check if activities have
typefield populated - Verify interests array is not empty
- Add more keywords to signal detection
- Adjust confidence formula divisor (0.6 → 0.5)
Wrong Persona Detection
Problem: Leads assigned to wrong persona
Solutions:
- Review detected signals in lead detail modal
- Adjust signal weights for competing personas
- Add more specific keywords
- Check for keyword conflicts (e.g., "budget luxury")
Missing Signals
Problem: Expected signals not detected
Solutions:
- Verify activity names/types contain keywords
- Check for typos in keywords
- Add Turkish/English variations
- Use lowercase comparison (already implemented)
Best Practices
For Developers
- Always test persona detection with real trip data
- Monitor confidence score distribution
- Track conversion rates by persona
- Adjust weights based on business feedback
- Keep signal definitions centralized
- Document any weight changes
For Admins
- Review persona statistics weekly
- Identify underperforming personas
- Adjust lead pricing based on persona
- Train providers on persona characteristics
- Monitor high-value lead conversion rates
- Use persona data for marketing insights
For Providers
- Read key signals to understand customer needs
- Tailor communication based on persona
- Offer recommended services first
- Adjust pricing based on spend potential
- Track which personas convert best
- Provide feedback on persona accuracy