Spaces:
Sleeping
Sleeping
Initial implementation of TasteEngine: multi-approach recommender system with Flask web UI, evaluation suite, and explanation engine
133a630 Knowledge-Based Recommendation Plan
Overview
Knowledge-Based Recommendation uses explicit domain knowledge, rules, and user-provided constraints. It requires no historical rating data — ideal for cold-start scenarios.
Method 1: Constraint-Based Filtering
Concept: Filter products based on explicit hard constraints provided by the user.
Constraints:
- Price range: min_price ≤ product_price ≤ max_price
- Category: product_category ∈ selected_categories
- Brand: product_brand ∈ preferred_brands
- Rating threshold: avg_rating ≥ min_rating
Steps:
- Apply all constraints sequentially (AND logic)
- Return remaining products
- Sort by match score (how many constraints satisfied)
- Recommend top-N
Method 2: Rule-Based Recommendation
Concept: Apply domain-specific if-then rules to generate recommendations.
Rules:
IF user bought a laptop THEN recommend laptop accessories (mouse, bag, charger)
IF user bought a smartphone THEN recommend phone case, screen protector
IF user is looking at a book THEN recommend books by same author
IF user budget < $50 THEN recommend items from "Budget Picks" category
IF user searches "gaming" THEN recommend gaming-related items
Steps:
- Check user's current interaction (cart, search, browse)
- Fire matching rules
- Aggregate and rank results
- Recommend top-N
Method 3: Utility-Based Recommendation
Concept: Score items based on weighted utility function derived from user preferences.
Utility Function:
U(item, user) = w₁ * price_score + w₂ * category_score + w₃ * brand_score + w₄ * rating_score
Where each score is normalized 0-1 and weights sum to 1.
Steps:
- User sets preference weights (or use defaults)
- Compute utility for all items
- Sort by utility descending
- Recommend top-N
Implementation (recommender/knowledge_based.py)
class KnowledgeBasedRecommender:
def __init__(self, products_df):
self.products = products_df
def constraint_based(self, constraints, n=10): ...
def rule_based(self, user_context, n=10): ...
def utility_based(self, preferences, weights, n=10): ...
Explanation Generation
- Constraint: "Recommended because it meets your criteria: budget ${budget}, category: {cat}"
- Rule: "Recommended because you bought a {trigger_item} — {rule_reason}"
- Utility: "Recommended with {score}% match to your preferences"
When Each Performs Best
| Method | Best For |
|---|---|
| Constraint-Based | Users who know exactly what they want |
| Rule-Based | Users browsing specific categories |
| Utility-Based | Users who want trade-off recommendations |