From bd64e2206d3500a7317179df623acb6d1b90bfdd Mon Sep 17 00:00:00 2001 From: Jatin Kumar Date: Fri, 2 Aug 2024 23:00:59 +0530 Subject: [PATCH] Add recommendation.ipynb notebook --- recommendation.ipynb | 326 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 recommendation.ipynb diff --git a/recommendation.ipynb b/recommendation.ipynb new file mode 100644 index 00000000..71460c36 --- /dev/null +++ b/recommendation.ipynb @@ -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 +}