TFIDF Tutorial: TF-IDF Based Recommender#
Introduction#
TFIDF is a Content-Based Models model for recommendation systems. This model implements TF-IDF Based Recommender.
How TFIDF Works#
Architecture#
TFIDF uses a sophisticated architecture for recommendation tasks.
Mathematical Foundation#
The model learns user and item representations for prediction.
Tutorial with cr_learn#
TFIDFRecommender is content-based — it needs item IDs and their text descriptions (e.g. titles, descriptions), not user-item ratings.
Step 1: Import and Prepare Data#
from corerec.engines.content_based import TFIDFRecommender
# TFIDF needs: list of item IDs and dict mapping item_id -> text description
items = list(range(20))
docs = {i: f"item {i} description with keywords topic{i % 5} category{i % 3}" for i in items}
# For real data, use item metadata from your dataset (e.g. product titles, article text)
# data = ml_1m.load()
# movies = data['movies'] # DataFrame with movie_id, title, genres
# items = movies['movie_id'].tolist()
# docs = {row['movie_id']: f"{row['title']} {row['genres']}" for _, row in movies.iterrows()}
print(f"Prepared {len(items)} items with text")
Step 2: Initialize and Fit#
model = TFIDFRecommender()
model.fit(items, docs)
print("Training complete!")
Step 3: Predict and Recommend#
# Similarity between two items
score = model.predict(items[0], items[1])
print(f"Similarity score: {score:.3f}")
# Top-k similar items for an item (content-based recommendations)
recommendations = model.recommend(items[0], top_k=10)
print(f"Top-10 similar items for item {items[0]}:")
for rank, item_id in enumerate(recommendations, 1):
print(f" {rank}. Item {item_id}")
Step 6: Evaluate#
from corerec.metrics import rmse, ndcg_at_k
# Rating prediction
predictions = [model.predict(u, i) for u, i, r in test_data]
test_rmse = rmse(test_data.ratings, predictions)
print(f"Test RMSE: {test_rmse:.4f}")
# Ranking quality
ndcg = ndcg_at_k(model, test_data, k=10)
print(f"NDCG@10: {ndcg:.4f}")
Step 7: Save & Load#
# Save model
model.save('artifacts/tfidf_model')
# Load model
loaded = TFIDFRecommender.load('artifacts/tfidf_model')
test_score = loaded.predict(1, 100)
print(f"Loaded model prediction: {test_score:.3f}")
Key Takeaways#
When to Use TFIDF#
✅ Best for datasets with content-based models characteristics
Best Practices#
Start with default parameters\n2. Tune embedding_dim based on data\n3. Use early stopping\n4. Monitor validation metrics