Add recommendation.ipynb notebook

This commit is contained in:
Jatin Kumar
2024-08-02 23:00:59 +05:30
parent 32e8626820
commit bd64e2206d
+326
View File
@@ -0,0 +1,326 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Recommendation System for Apna_Vaidya\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 1. Rule-Based System"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"user_profile = None\n",
"user_scenario = None"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"def rule_based_recommendation(user_profile, user_scenario):\n",
" if user_scenario == 'Patient with Symptoms':\n",
" return [\"Talk to a Doctor\", \"Verify with a Doctor\", \"Symptom Checker (AI-based)\"]\n",
" elif user_scenario == 'Chronic Condition Management':\n",
" return [\"Get a Prescription\", \"Order Medication\", \"Talk to a Doctor\", \"Talk to a Pharmacist\", \"Health Coach Consultation\"]\n",
" elif user_scenario == 'New Medication Inquiry':\n",
" return [\"Talk to a Doctor\", \"Talk to a Pharmacist\", \"Medication Information (AI-based)\"]\n",
" elif user_scenario == 'Diagnostic Needs':\n",
" return [\"Connect with a Diagnostic Center\", \"Verify with a Doctor\", \"Home Sample Collection\"]\n",
" elif user_scenario == 'Prescription Refill':\n",
" return [\"Order Medication\", \"Get a Prescription\", \"Talk to a Pharmacist\", \"Auto-Refill Subscription\"]\n",
" elif user_scenario == 'Preventive Care':\n",
" return [\"Schedule a Check-up\", \"Health Coach Consultation\", \"Vaccination Booking\"]\n",
" elif user_scenario == 'Post-Treatment Follow-up':\n",
" return [\"Talk to a Doctor\", \"Schedule a Follow-up\", \"Physical Therapy Consultation\"]\n",
" else:\n",
" return [\"Talk to a Doctor\"]\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Talk to a Doctor', 'Verify with a Doctor', 'Symptom Checker (AI-based)']\n"
]
}
],
"source": [
"# Example usage\n",
"user_profile = 'Chronic Condition Management'\n",
"user_scenario = 'Patient with Symptoms'\n",
"recommendation = rule_based_recommendation(user_profile, user_scenario)\n",
"print(recommendation)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 2. Collaborative Filtering"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from sklearn.metrics.pairwise import cosine_similarity"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Example user-item interaction matrix (rows: users, columns: options)\n",
"interaction_matrix = np.array([\n",
" [1, 1, 0, 0, 0, 0, 0, 0, 0], # User 1\n",
" [0, 1, 1, 0, 0, 0, 0, 0, 0], # User 2\n",
" [0, 0, 1, 1, 0, 0, 0, 0, 0], # User 3\n",
" [0, 0, 0, 1, 1, 1, 0, 0, 0], # User 4\n",
" [0, 0, 0, 0, 1, 1, 1, 0, 0], # User 5\n",
" [0, 0, 0, 0, 0, 1, 1, 1, 0], # User 6\n",
"])\n",
"\n",
"# Calculate similarity between users\n",
"user_similarity = cosine_similarity(interaction_matrix)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Recommend based on the most similar user's interactions\n",
"def collaborative_filtering_recommendation(user_index, interaction_matrix, user_similarity):\n",
" similar_user_index = np.argmax(user_similarity[user_index])\n",
" recommendations = np.where(interaction_matrix[similar_user_index] == 1)[0]\n",
" return recommendations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Example usage\n",
"user_index = 0 # User 1\n",
"recommendations = collaborative_filtering_recommendation(user_index, interaction_matrix, user_similarity)\n",
"print(recommendations) # Output the indices of the recommended options"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 3. Content-Based Filtering"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"\n",
"# Example option descriptions\n",
"options = [\n",
" \"Talk to a Doctor for immediate consultation\",\n",
" \"Verify with a Doctor for second opinion\",\n",
" \"Use Symptom Checker to self-diagnose\",\n",
" \"Get a Prescription for chronic condition\",\n",
" \"Order Medication online\",\n",
" \"Talk to a Pharmacist for medication advice\",\n",
" \"Health Coach Consultation for chronic condition management\",\n",
" \"Medication Information for new prescriptions\",\n",
" \"Medication Interaction Checker\",\n",
" \"Connect with a Diagnostic Center for tests\",\n",
" \"Home Sample Collection for diagnostics\",\n",
" \"Book Lab Tests Online\",\n",
" \"Schedule a Check-up for preventive care\",\n",
" \"Health Screening Packages for preventive care\",\n",
" \"Vaccination Booking for preventive care\",\n",
" \"Schedule a Follow-up for post-treatment\",\n",
" \"Physical Therapy Consultation for recovery\",\n",
" \"Remote Monitoring Services for follow-up\",\n",
" \"Talk to a Therapist for mental health support\",\n",
" \"Join a Support Group for mental health\",\n",
" \"Mental Health Self-assessment (AI-based)\",\n",
" \"Meditation and Mindfulness Resources\"\n",
"]\n",
"\n",
"# User profile description\n",
"user_profile_description = \"Patient with chronic condition needing regular medication and follow-ups\"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Vectorize the descriptions\n",
"vectorizer = TfidfVectorizer()\n",
"option_vectors = vectorizer.fit_transform(options)\n",
"user_vector = vectorizer.transform([user_profile_description])\n",
"\n",
"similarity = cosine_similarity(user_vector, option_vectors)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Recommend based on the highest similarity scores\n",
"def content_based_recommendation(similarity, options):\n",
" recommendations = np.argsort(similarity[0])[::-1]\n",
" return [options[i] for i in recommendations[:5]]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Example usage\n",
"recommendations = content_based_recommendation(similarity, options)\n",
"print(recommendations)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 4. Machine Learning Model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# using a decision tree classifier\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Example dataset (features: user profile data, labels: recommended options)\n",
"# This is a simplified example; in practice, you would have a more complex dataset\n",
"X = np.array([\n",
" [25, 1, 0, 1], # User 1: age, chronic condition, acute symptoms, preventive care\n",
" [45, 1, 1, 0], # User 2\n",
" [60, 0, 0, 1], # User 3\n",
" [35, 1, 0, 1], # User 4\n",
" [50, 0, 1, 0], # User 5\n",
"])\n",
"y = np.array([\n",
" [0, 1, 1, 0], # Recommended options for User 1\n",
" [1, 1, 0, 1], # Recommended options for User 2\n",
" [0, 0, 1, 1], # Recommended options for User 3\n",
" [1, 1, 0, 0], # Recommended options for User 4\n",
" [0, 0, 1, 1], # Recommended options for User 5\n",
"])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Split the data into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Train the decision tree classifier\n",
"clf = DecisionTreeClassifier()\n",
"clf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Predict recommendations for a new user\n",
"new_user = np.array([[40, 1, 1, 0]]) # New user profile\n",
"predictions = clf.predict(new_user)\n",
"print(predictions)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}