{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Algorithms in ySights\n", "\n", "This tutorial covers the analytical algorithms available in ySights for understanding simulation dynamics.\n", "\n", "## What You'll Learn\n", "\n", "- Profile similarity analysis\n", "- Recommendation system metrics\n", "\n", "---" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from ysights import YDataHandler\n", "from ysights.algorithms import (\n", " profile_topics_similarity,\n", " visibility_paradox,\n", " user_visibility_vs_neighbors,\n", " visibility_paradox_population_size_null,\n", " engagement_momentum,\n", " personalization_balance_score,\n", ")\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "plt.style.use('seaborn-v0_8-darkgrid')\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Initialize data handler and get network\n", "db_path = 'ysocial_db.db'\n", "ydh = YDataHandler(db_path)\n", "network = ydh.social_network()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Profile Similarity Analysis\n", "\n", "Analyzes how similar users' interest profiles are across the network." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Computed 949 similarity scores\n", "\n", "Similarity Statistics:\n", " Mean: 0.8509\n", " Median: 0.9048\n", " Std Dev: 0.1667\n", " Min: 0.1600\n", " Max: 1.0000\n" ] } ], "source": [ "# Calculate profile similarity\n", "# This computes cosine similarity between users' topic interest profiles\n", "similarity_scores = profile_topics_similarity(ydh, network)\n", "\n", "# Convert dictionary values to list for statistics\n", "similarity_values = list(similarity_scores.values())\n", "\n", "print(f\"Computed {len(similarity_scores)} similarity scores\")\n", "print(f\"\\nSimilarity Statistics:\")\n", "print(f\" Mean: {np.mean(similarity_values):.4f}\")\n", "print(f\" Median: {np.median(similarity_values):.4f}\")\n", "print(f\" Std Dev: {np.std(similarity_values):.4f}\")\n", "print(f\" Min: {min(similarity_values):.4f}\")\n", "print(f\" Max: {max(similarity_values):.4f}\")" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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1WldN9xwQ7oMKJ0mpKtG6f7PPvvMDLrhe+dS6w8tXrxYvvnmG/tNjR49WoYMGeKRviPnP5c33nij7Nq1y2nfvn37TG0p+Na51IDF3r17nfbt379fKlSoYFl/4R5169aVDRs2mIxipffr1683+wEAAOA9CEp5mE4N0eXHdTl5zaBZunSpzJgxQ3r37m2/oq/TvZQW3NWlV8ePH28/pjdW3/Otc6kZGpUrV3a6KQ0yaiFe+NbPpS40oEGp999/Xw4ePCjvvvuuyYTTekTwrXOpy1trLSkNFOu51Ol8miWlCxLA+zmey7Zt28r58+dlzJgxZkVFvdc6U+3atfN0NwEAAOCAoJQX0EK6tWvXNnWiRo0aZQqYt2nTxhxr1qyZ/PDDD2b7p59+MgPurl27mv22mw624VvnEvnnXGpG1Mcffyw///yzdOzY0dxr4XMyGX3vXOrqe7qKol4A0ECWZtbMnDmTYLGPcDyXhQsXNudRs+K6dOkimzZtMj+X4eHhnu4mAAAAHPil2nLbAQAAAAAAAIuQKQUAAAAAAADLEZQCAAAAAACA5QhKAQAAAAAAwHIEpQAAAAAAAGA5glIAAAAAAACwHEEpAAAAAAAAWI6gFAAAAAAAACxHUAoAAAAAAACWIygFIFe+++476datm9x4441Sr149uffee+WLL75wanPHHXfI+++/n+PXcPx6vdfHuTF//ny57rrr7I+PHj0q//3vf/P8cwAAAAAA/CvQYRsAsuWrr76SMWPGyIgRI6RBgwaSmpoqv/32m4wePVpiYmLkiSeesLcLCQnJ1evk5uvTat++vTRv3tz+ePjw4VK+fHnp0KFDnn4OAAAAAIB/EZQCkGOff/65yQi677777PuqVasmJ06ckE8//dQejClZsmSuXie3X59WaGiouVn9OQAAAAAA/sX0PQA55u/vLxs2bJBz58457R84cKB8+eWXmU6/e+ihh2TSpElyyy23mKlur7zyihw7dkwGDRokdevWldatW8v//ve/DL8+rb/++st83U033STXX3+9tGzZUmbMmGE/rl/34IMPytChQ6V+/fry2muvOU3f69Wrl/zxxx+yYMEC8zozZ840fYqLi7M/R0pKitx6660ye/bsXH0OSUlJ8u6778rtt99u3meXLl1MRpXN3r175ZFHHpHGjRubjKvBgwfL33//bT+ufX355Zela9eu0rBhQzNlUH399dfSrl07qVOnjrnX96B9BgAAAABvRlAKQI49/PDDsn37dhOw0QDM1KlTZfPmzVKkSBGpWrVqpl/3559/yv79+02Q56WXXjKBG80y0oCKBoyqV68uzz//vJkGlxUNHPXr10+KFy9u6jctXLhQ2rZtK+PHj5cdO3bY261du1YiIyPl22+/NYEdRxq00iCUvrZOw7vrrrtM8Gjx4sX2NqtWrZIzZ85Ix44dc/U56BQ/7adOF/z+++/NFEINQu3bt88En+6//34JDg42QSUNrEVHR5uA2sWLF+3PMW/ePOndu7fJztKv189uwoQJJhtL62I99dRTMm3aNHnzzTevcPYAAAAAwLOYvgcgxzQAdNVVV5kpaprxs2LFCrO/SpUq8vrrr5tsn4xoFs+oUaOkcOHCJmjzxhtvSJMmTaRz587mePfu3eXnn382QZnSpUtnGZTSAE3Pnj2lUKFCZp9mF3388ceya9cuqVmzpr2t7tcgkVq/fr19vwa0goKCzHQ+2zRBzZjSLKROnTqZx7YsqmLFiuX4c9DAkga9NNNJ2yvN3tLAmx7TbKfw8HATTNLAlHrvvfdM5pcG0/Q9Kn1PGjiz+fDDD+XRRx+118OqWLGieT79fIcMGeLWWlwAAAAA4E4EpQDkiq42pzcNNO3cudMEZD777DMZMGCALFmyRCIiItJ9je7TgJSNBmMqVapkf2yr95SYmJjla2sQqUePHiZDSjOVDh06ZPqgHKev6evZAlKu0PpQGug5efKk6dvSpUtNgCg3n4Ou8KcZWDptz9HTTz9tz9jS6Ye2gJQqVaqUCdrpFEWbypUr27dPnz4tx48fl4kTJ5ppgTbah4SEBDly5IjJOgMAAAAAb0RQCkCOaDBkypQppp6TZglpXaVatWqZW6tWrcxUN502Z8sKcqSZSWnp12eXZlLplDcNTmkmU7NmzeSGG26QFi1aOLXLblFzfR6d7qfBLs2kKlq0qNmXm89Bs6ayktlURQ0wOX5eju/FFnh74YUXTH2utMqWLevyewYAAAAAq1FTCkCOaEaP1jeyFdt2pEEcpYGdvKRBo7Nnz8qcOXPkscceMwXSbcXGr1SPKisBAQFmKqFmOP30009mGp/uy83noBlOGlzasmWLU5tu3brJf/7zH1N4XY85ZofFxMTIwYMHM8120gwwDcgdPnzYPL/ttm3bNnnnnXdy/P4BAAAAwApkSgHIEQ2GaIFvnTZ26dIlkxGlU/L27Nlj6hzpCnK6Qlxe0swkrSu1aNEiU7dJC4aPHTvWpal/jrQelRYa16wnfU6lK+NpbSoNRg0bNswtn4MWLdd2+jXXXHONqTGlU/PGjRtnglsaXHvuuefM1EHtvxZsL1GihL1eVFp+fn5meuDbb78t5cqVM4XWtZZWVFSUqUXlOBUQAAAAALwNQSkAOaYrvem0tLlz55qV9OLj401wRFey0+lseU0DQJoVpEEdLe5dvnx56dq1qyxbtsxkHWnBdFc88MADZkW8u+++W37//XcTiNL3pfWfdIrcleoyufo5aP0ofe6RI0fKhQsXpEaNGmalvmrVqpnjWoNKi77bVuFr2rSpeWzLuMqIrj6oxcxnzZplPgfNytLsKy3sDgAAAADezC81N3NcACCf0l+NWhPqkUceMYEuAAAAAIB7kSkFAA50hbzly5fL6tWrJTY2NtOpcwAAAACA3CFTCgDSaN68ubnX+lSZrboHAAAAAMgdglIAAAAAAACwnL/1LwkAAAAAAICCjqAUAAAAAAAALEdQCgAAAAAAAJYjKAUAAAAAAADLEZQCAAAAAACA5QhKAQAAAAAAwHIEpQAAAAAAAGA5glIAAAAAAACwHEEpAAAAAAAAiNX+D0DdBzxpEbYjAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize similarity distribution\n", "plt.figure(figsize=(12, 5))\n", "\n", "# Histogram\n", "plt.subplot(1, 2, 1)\n", "plt.hist(similarity_values, bins=50, edgecolor='black', alpha=0.7, color='coral')\n", "plt.xlabel('Similarity Score', fontsize=11)\n", "plt.ylabel('Frequency', fontsize=11)\n", "plt.title('Profile Similarity Distribution', fontsize=13, fontweight='bold')\n", "plt.axvline(np.mean(similarity_values), color='red', linestyle='--', \n", " label=f'Mean: {np.mean(similarity_values):.3f}')\n", "plt.legend()\n", "plt.grid(True, alpha=0.3)\n", "\n", "# Box plot\n", "plt.subplot(1, 2, 2)\n", "plt.boxplot(similarity_values, vert=True)\n", "plt.ylabel('Similarity Score', fontsize=11)\n", "plt.title('Profile Similarity Box Plot', fontsize=13, fontweight='bold')\n", "plt.grid(True, alpha=0.3, axis='y')\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": "## 2. Recommendation System Metrics" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Engagement Momentum\n", "\n", "Measures how consistently users engage with recommended content over time." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Engagement Momentum Analysis:\n", " Users analyzed: 17659\n", " Average momentum: 1.7804\n", " Median momentum: 0.9986\n", "\n", "Top 5 Users by Engagement Momentum:\n", " 1. User 200: 30.4290\n", " 2. User 785: 28.3261\n", " 3. User 880: 28.2236\n", " 4. User 885: 27.7070\n", " 5. User 192: 27.1435\n" ] } ], "source": [ "# Calculate engagement momentum\n", "# time_window_rounds specifies how many rounds to analyze\n", "momentum = engagement_momentum(ydh, time_window_rounds=24)\n", "\n", "print(\"Engagement Momentum Analysis:\")\n", "print(f\" Users analyzed: {len(momentum)}\")\n", "print(f\" Average momentum: {np.mean(list(momentum.values())):.4f}\")\n", "print(f\" Median momentum: {np.median(list(momentum.values())):.4f}\")\n", "\n", "# Show top 5 users by momentum\n", "top_momentum = sorted(momentum.items(), key=lambda x: x[1], reverse=True)[:5]\n", "print(\"\\nTop 5 Users by Engagement Momentum:\")\n", "for i, (user, score) in enumerate(top_momentum, 1):\n", " print(f\" {i}. User {user}: {score:.4f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Personalization Balance Score\n", "\n", "Measures how well the recommendation system balances exploration vs. exploitation." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Personalization Balance Analysis:\n", " Users analyzed: 975\n", " Average balance: 0.0065\n", " Median balance: 0.0000\n", "\n", "Interpretation:\n", " Score → 0: Heavy exploitation (narrow recommendations)\n", " Score → 1: Heavy exploration (diverse recommendations)\n" ] } ], "source": [ "# Calculate personalization balance\n", "balance_scores = personalization_balance_score(ydh)\n", "\n", "print(\"Personalization Balance Analysis:\")\n", "print(f\" Users analyzed: {len(balance_scores)}\")\n", "print(f\" Average balance: {np.mean(list(balance_scores.values())):.4f}\")\n", "print(f\" Median balance: {np.median(list(balance_scores.values())):.4f}\")\n", "print(\"\\nInterpretation:\")\n", "print(\" Score → 0: Heavy exploitation (narrow recommendations)\")\n", "print(\" Score → 1: Heavy exploration (diverse recommendations)\")" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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1eJWJ1taYpJtnL/Eit2Ybk96erotWbLEvvjiC9u+fbtt3rw5f0sGAAAAAEBxa+mW6dOn2/Dhw23dunWuO/nUqVPt6aefdmt1a3sgEB1TuwMAAAAAUKAt3e+9957dc889dsopp7i1uYPBoNt+zjnn2MyZM23MmDEHVSAAAAAAAIptS/e4cePs0ksvtf79+1ta2r/rpnXq1Mk2btxokydPtttuuy2/ywkAAAAAQPS3dP/++++uVTsrDRs2tLVr1+ZHuQAAAAAAKH6hu0qVKvbbb79luU/btR8AAAAAAOQhdLdr185GjhxpH3zwgaWkpLhtmkzt559/duO527Rp40c5AQAAAACI/jHdGq/966+/uuvY2H8ye7du3Wznzp3WpEkTu/XWW/0oJwAAAAAA0R+6tRzYM888Y19//bV9++23bn3u8uXLW9OmTe2ss85yrd55df3111vlypVtyJAh7vaiRYvsoYceciH/yCOPtIcfftiOO+640P3fffdde/LJJ239+vV2+umn2yOPPOIeDwAAAABAkexe7mnWrJndeeedLujecccdduKJJx5U4P7f//7nlhzzqOVcIVyt52+++aY1atTIbrjhBrddFixYYPfff7/17t3b3njjDdu6dav17ds3z68PAAAAACh8m77+wbb8udpdF8vQvXfvXhs1apS988477vZ3333nAvipp55qV155pW3ZsiXXhVBr+bBhw+z444/PsB54yZIlrU+fPla3bl0XsMuWLevGksukSZOsbdu21qFDB6tXr557vEL7ypUrc/36AAAAAIDIECxX3iwh4Z/r4hi6NYna2LFjXcuyDBw40CpWrOhamf/8808bPnx4rgsxdOhQu/DCC10Xcs/8+fOtcePGodZzXZ900kk2b9680H61gnsSExMtKSnJbQcAAAAAoEiGbnUDV3fyyy+/3C0RtnTpUrvpppuse/fudvvtt9uMGTNy9XzffPON/fjjj9azZ88M2zVOu3r16hm2aTmyNWvWuJ/XrVu33/0AAAAAABS5idQUdhs2bOh+/vzzz90M5meeeaa7fcghh9i2bdty/Fx79uxxE6X169fPSpUqlWHfrl273KRt4XTbW6Zs9+7d+92flRIl4uwghp0XiEAgzmL0X0yMxcZmLKy2xcT+cx9dgIIWH0+9Q+SifiJSUTcRyaifiESBUSMtbsd2C5QtZym9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bpuub731Lvv77w0unLZr195eeul1u/zyK23QoIddEJf//neaC9c33XSzPffcK1amTFl78MF7XZfxSy+9wo477gSbPv2DHJV/586d9uqrL9ppp53uWsDlqaeG28qVK2zEiFH28suTrWHDRjZ06COWmpq6z+MHDHjQ0tLSbfz4511ZqlWrbsOHD8lwn5deet769x9kTz89wRYvXmSvvTbJbV++/Dd30uHMM1vYCy+8Zmeffa717Xune/9Ll/7qTkB0736Nvfji69a6dTu7665bbNWqlXn+rAAAYEw3AKDYU/e1nJxN33tCQ9v68hsZtiV062LxC+Yf8LG7buxtu27qnecyPv74YBsxYpj7ec+ePVayZCk3iVrr1m3dtldffdnuuOOe0ERjd999n2v1Vqvu6aef6bZdeGFHO/TQw0ItwlKxYiUXfF977WXX1bxTpy5ue61ate3XX39xE60pAL/99pvu9Vq1au3233FHn1CQVat1fHy86z5+oPKrRV7lL1GihJsYzXPiiSfZpZdebkcccaS73bXrFfbOO/+1jRv/dt3pPXr8GWc0t+bNW1r16jXcto4dL7G77741w+tdc80Nduyxx7mfW7duY0uWLHI//+9/0+344xvaVVdd625363aV7d69y3Vzf/31l+388zu4+8vFF19q8+bNtrfemmo333x7nj87AEDxRuhGnmzYsMGt750VTerDut8AipKYbVst7v9D6P6kJ9XcZ1vshg05eqxe42AoRJ51Vkv3cyAQcAFXs5h7Lcfr1q21hx7qa7Gx/3ZiU7hdufLP0O1DDknK9vlXrPjdvv76S9d13KNW8tq1D3U///nnCuvRo35oX+XKVaxXr1vzVP7t27e5Vvnbb+/lWuWPOKKutWlznn355ef29ttv2YoVf9gvvyxx901Pz7hGq7qkX3RRZ/vkkw/t558XhO6b+X46aeBRq7zX4q/3ccwx/74Pue66m9z1H3/8YcuXf+JOMHjU0t606ak5fp8AAGRG6C7m9GUiu25z2YVnBe5et99oW7Zn/QWyQrkEGz1iHMEbQJERLJ9gaYnZB1JPehZ/17QtJ4/VaxwMLa0VHiTDpaX9s47pI48MtUMPrZNhX0LCv6+rsJ4dPYdazbt375Fhu1qww6/zq/z16h1r33zztRsT3rv3bTZw4EP2008LrE2bdtahQ2d3UuHGG6/e53kUrhXWt23b5rq2N2t2pvu37P77785wP7WkZzXZ2/7eh46ButXrBEC4kiVL5vl9AwBA6C7Gdm/faStX/GH9hvSzkoGSOQ7PauFW4E5q2cDKVamQYd/2v7dY8oyF7j6EbgBFhbp957Xrd+bu5oWhfPnyLtRu3LjBjZMWBdGHHrrPLrusmxtvfSC1a9dxLcfhwVjdx1NTU1wQr1XrUFu27NdQV/UtWzbb5Zd3tokTX8owIVpuKAenp6e5SdQ+/vgDmzDhBatfv4Hb9803X2U5M/offyx3k7a9887HVqlSJbftzTenZHnfrOh9qNt8uBtv7GGdO3dxJyxWr/4rwzEYM+Ypd2zU7RwAgLwgdBdjqbtTLD3OLLF5A6tas3quw7MCd0KNKgVUWgDA/nTpcplNmDDWKlasbHXqHOZmMv/pp/l26KEP5ujxHTtebFOnvmETJoxxy5Fp8rEJE0Zb37793H6F0pEjn7C6dY+0OnUOd/dLTExyl1KlSrteUBonrttZ0ZhpTVYmKSkproX7r79WWosWZ1sgUNI9x+efz3BjzNUF/IknHnP3zTyRWrly5V0X+k8//dBOP/0sW7x4oT333PjQ8x5Ihw6d3Ozkmoldj//ss0/s999/c2PK1f2+V69rrV69Bu7khSaee+ONV+2pp8bm6BgCAJAVQjesbOWELMNzdl3PtW1v2r+z4QIACl/Xrt3c2O7HHhtkO3bscN23n3ji6Qzdy/dHa3UPHfqEjR37tJtUrWrV6q7btzdR27nntnNLdQ0fPtS1TDdq1NgeeeSfid3OOquFTZ8+zYXZqVPfca3umY0cOdxdRCH78MOPsAEDBrtJzaRfvwE2atSTNnXq65aYWNOuvLKHTZw41n79dYk7ieDR5Gl33nmvO6kwfvxo1wqt2dfVPX3p0l/2O5mb1KxZywYOHGbjxj3tThwcdtgRNnToCLd+uC4PPjjAnntugmvh1n0femiQC+QAAORVTDAnfbGixPr12yzS/f77cut51412VKfT9gnCfy38zb58brq1uLmL1TisZo725eUxsu63lfb501Os5qGH7tP1fM+u3Za8Ltla3NLFqtb+d0ZZ2br2b/t1yiwb+8Q494UK0SUQiLOUlH/GjgKRhvqJSEXdRCSjfiISVW5Yz01SqjlTNs7/Z2LNSFWtWvkD3oeWbuS66/napStt5VsrQxP3AAAAAEB+2XtCQwvWqmVplaNjKCuhG7nuer5tw+ZCKw8AAACA6Lb15TeiqhfGv4t5AgAAAACAfEXoBgAAAADAJ4RuAAAAAAB8wphuAAAAAEDESOjWxeI2/m2lKldx47uLOkI3CtSGDRts27atWe4rXz7Bqlbd//qqAAAAAKJb/IL5bsmwmMQkiwaEbhRo4O51+422ZXvWobtCuQQbPWJcvgZvQj4AAACAwkToRoFR+FXgTmrZwMpVqZBh3/a/t1jyjIXuPvkVhAsj5AMAAABAVIXuPXv22MMPP2wfffSRlSpVynr06OEuKDypqam2atXKfbZr2960vS5wZ177e3+P8/aVKFEiVy3WBR3yAQAAACDqQvewYcPs559/thdffNGSk5PtnnvusaSkJGvTpk1hF61Y2r19p61c8Yf1G9LPSgZKZti3Z9duS16XbEempObqcQrcyatWWc1Da1t8XHyuW6yzC/kAAAAA4LciHbp37txpU6ZMsYkTJ1qDBg3cZenSpfbKK68QugtJ6u4US48zS2zewKrWrJ5h39qlK23lWystLS0t149bseoPq35GvX32qcV6xYfzbPHihVarVu0sW9aRfzZsWG9//705y32MkQcAAACiLHQvWbLE9u7da40aNQpta9y4sY0bN87S09MtNpZlyAtL2coJ+7Qub9uw+aAel9W+vLasH6g7OwEy6zHyN99xk23atiXL/YyRBwAAAKIsdK9fv94qVapkgUAgtE1f+DXOe/PmzVa5cuVCLR8it2V9f2FdSgdK2YP3POTqV27Gl+dl7PnBzMCe17LkdYz85h1bImaMPDPTAwAAoCgo0qF7165dGQK3eLdTUlKsKFOIyWznpm3uesfGrba1dKkc7cvLY4rivv3J6nFbVv/twnqFhrWtYrWMJ2e2rNloC9/72u588I5cjS8/0NjzMoHS9sA9/bIM8tnZtGmjDRz2iO3cs2uffXktS17L6brr7933BIZnb+rebHsO5Lf9HReh1R0AAACRIiYYDAatiHr//fdt4MCB9vXXX4e2/fbbb9auXTv77rvvrGLFioVaPgAAAABA8VakBz3XqFHDNm3a5MZ1h3c519JhCQkJhVo2AAAAAACKdOiuX7++xcfH27x580LbZs+ebccffzyTqAEAAAAACl2RTqalS5e2Dh06WP/+/W3BggX2ySef2HPPPWfdu3cv7KIBAAAAAFC0Q7f07dvXrc995ZVX2sMPP2w333yztW7d2iKVZla/7777rEmTJnb66ae7kwTZWbRokV188cXWsGFD69Spk/38888FWlYUP7mpn54ff/zRWrVqVSDlQ/GWm/r5+eef24UXXuiWlDz//PPt008/LdCyonjJTd18++237dxzz7UTTjjBLr30UtdoAETav+2rVq1yfz81RxIQCXXzpptusmOOOSbD5bPPPrOiokjPXu61dg8dOtRdioJhw4a58Pziiy9acnKy3XPPPZaUlGRt2rTJcL+dO3fa9ddf774sDhkyxF577TW74YYb7OOPP7YyZcoUWvkR3XJaPz2//PKL3XrrrVay5L7LrgGFVT+XLFlivXv3tj59+thZZ51lX331launU6dOtXr16hVa+RG9clo3dZLy/vvvd5PAnnTSSfbqq6/addddZzNmzLCyZcsWWvkR3XL7b7uoF6m+iwKRUjd/++03e+yxx+zUU08NbatQIeMSthFNs5ejYOzYsSN4/PHHB7/99tvQttGjRwevuOKKfe47ZcqUYMuWLYPp6enutq7POeec4LRp0wq0zCg+clM/5bXXXgueeOKJwfPPPz/YokWLAiwpiqPc1M/HHnsseM0112TY1qNHj+ATTzxRIGVF8ZKbuvnee+8Fx4wZE7q9bdu24NFHHx2cP39+gZUXxUtu/22X6dOnBy+99FJXN8MfBxRW3dyzZ0+wfv36weXLlweLqiLfvbwoUeuLZlpXdx1P48aNbf78+Zaenp7hvtqmfTExMe62rnVWPHzSOKCw6qd88cUXrofJVVddVcAlRXGUm/p50UUX2V133bXPc2zbtq1AyoriJTd1s23btq6LpOzevdteeOEFq1KlitWtW7fAy43iIbf/tmtVILUmDhgwoIBLiuJmSS7q5vLly10Wql27thVVhO4CpOXMKlWqZIFAILStatWqbjzD5s2b97lv9erVM2zTP8xr1qwpsPKieMlN/ZQxY8ZE9PwJKL71UwEmvBv50qVL7ZtvvsnQJQ0orL+dovqoL5qjRo1y4xnpWo5IqZ8a0qgTl0cddVQBlxTFzfpc1E2F7nLlyrlhYxr73blzZ5s5c6YVJYTuArRr164MFUu82ykpKTm6b+b7AYVRP4GiUj83btzoJthUTyEm/EOk1E0FmjfffNNuueUWu/fee+nFhoion7NmzXJL7/bs2bNAy4jiaVcu6qZCt3oHKXA/88wzbr4W9Rr66aefrKgo8hOpFSWabCpzJfJulypVKkf3zXw/oDDqJ1AU6ueGDRvs6quv1twlNnLkSIuN5TwzIqNuqjVHl/r167uulK+//rqdeOKJBVJeFC85rZ8KNP369bOHHnqIf/MRcX87e/bsad26dQtNnKbebAsXLrTJkyfb8ccfb0UB30AKUI0aNdxYGY1fCO9aoYqVkJCwz331hTGcbmfucg4URv0EIr1+rl271i6//HL3D/hLL71klStXLuASo7jITd3U8mD6oph5OIQeDxRm/VTdXLlypet9oaEP3jhbza6vMA4U5t/O2NjYfWYqP+KII9y/9UUFobsA6Yx2fHx8hm5k6sajMzSZW2C0NvfcuXNdC43oes6cOW47UNj1E4jk+qllbq699lq3fdKkSe4fdiAS6qaWrXviiScybFMI15dHoDDrp9aN/+ijj+y///1v6CJa3k5LLgKF+bfz3nvvtb59++4zEVtR+tvJN+kCXlO8Q4cObu1DnVH85JNP3CLw3bt3D53dUfce0fp0W7dutUGDBtmyZcvctcY+aOZToLDrJxDJ9XP8+PH2559/utn1vX26MHs5CrtudunSxb799lu3Ju0ff/zhhj3oMawCAb/ktH6qdbFOnToZLqKTlprIFyjMv50tW7a0d955x50MWrFihZuEUgH9iiuusCKjsNcsK2527twZ7NOnj1vf+PTTTw8+//zzoX1aDzF8HW6t29mhQwe3hl3nzp2DCxcuLKRSo7jITf30aBvrdCOS6ue5557rbme+3HPPPYVYekSz3PztnDFjRrB9+/bu3/aOHTsGZ8+eXUilRnGRl3/bvX2s041IqZuTJ08Otm7dOnjccccFL7roouD3338fLEpi9L/CDv4AAAAAAEQjupcDAAAAAOATQjcAAAAAAD4hdAMAAAAA4BNCNwAAAAAAPiF0AwAAAADgE0I3AAAAAAA+IXQDAAAAAOATQjcAAEVMMBgs7CIAAIAcInQDAPJdt27d7JhjjslwOe6446x58+b28MMP25YtWywa6X0+/fTT7ufvvvvO3dZ1fvr000/tnnvuCd3263Wy4r1W5s+1VatWNmzYMNu1a1eunm/VqlXuOd58800rSv766y+7//777ayzznLv/5RTTrEbb7zRvv/++8IuGgAgAsUXdgEAANHp2GOPtYceeih0OzU11RYuXGhPPPGELV682F577TWLiYmxaNWgQQN744037Mgjj8zX533hhRcK5HX2p1+/fu51RUF7yZIlNnLkSFu/fr099thjFs30Hrt06WI1atSwO+64wxITE23jxo02ZcoUu/LKK+2pp56y1q1bF3YxAQARhNANAPBFuXLl7MQTT8yw7T//+Y/t2LHDBbT58+fvsz/a339Rfp1wCvjhr3nqqafatm3bbOzYse5Ei8oUrSZPnmxbt261Dz74IMP7POecc+ziiy8mdAMA9kH3cgBAgVJ3XElOTg5t++STT6xjx452/PHHW7NmzWzgwIG2c+fO0H512VaoGTVqlDVt2tROP/1010X9559/dq2LjRs3tkaNGtlVV11l8+bNy/B6X3/9tV122WXuPieffLLdeeedtnr16tB+dW1Wq7xOAqgFU2Vo0aKFPfvss/t0he7Tp497bbXyKmjq9qZNm7J8n5m7fbds2XKfrtneRc+dk9dQt311YdbFe+6supf/9NNPds0117j3e9JJJ7muz0uXLt2nbN9884316NHDGjZs6I67WqnT0tLy9LkmJCTss00t4L1793bdr/V+zjjjDPfZ7t69O9vn+eGHH1zZdYJGdUXHTZ9/enp66Bip7O+//77dcsst7nNXnXjggQcy1BmNe1evgLZt29oJJ5zg6o8+0/Dx8D/++KNdccUV7v3rOdRtX63W+7NhwwbXQyPzcYqLi3N1S3Uo3MyZM+3SSy91Jyn0uaqXgEK7548//nDvQ8df99FnPHv27NB+7/0+//zz1qZNG1fWadOmuX2//vqr3XDDDe4z1qVXr162cuXK/ZYfAFDwCN0AgAL1+++/u+vatWu763feeceFhSOOOMJGjx7tQtrbb79tPXv2zBCQFNIVYEaMGGF9+/Z1Iefaa6+1SpUquVCm7erqrMCmVlf573//60KlugCrW7seN3fuXBeM/v7779BzK9Dddttt1q5dO5swYYILMBqj/OWXX7r9et7u3bvbb7/95lpyFd50+3//+5973ZzQCQN1A/cueq+lSpVyQUzly8lraLtOEOii5/C6eIf79ttvrWvXru7nRx991IVcnWRQ8NNzh7vrrrvcyYhx48ZZ+/bt7ZlnnnHdpA9Ex2vv3r3uonLPmTPHXnrpJevQoUOo9XfdunV2+eWXu/1DhgyxiRMn2nnnnWcvv/yyu29WFNJ14qRixYruPavlvEmTJu7YKWSH07GoWbOmjRkzxn3mU6dOdff36PPTRaFd769z5872+OOPu8/XC/d6LX0GTz75pN13333uZIaO+f5OCmheAu2/5JJL3Ge0aNGiUABXcNbjPZ999pkLxVWqVHGvoeOtE0y33367279s2TJ3sknBWicNVD4Fep1Iyjw+XHX8uuuuc+9Jr6PfI32mqsdDhw61QYMGucCtzz68bgMAIkAQAIB8dsUVVwQvv/zyYGpqauiyYcOG4HvvvRds2rRpsEuXLsH09HR3OfPMM4PXXHNNhsfPmjUrePTRRwc/++wzd3vkyJHu9g8//BC6z9y5c9222bNnh7atWLEiOGzYsODq1auDaWlpwWbNmgV79OiR4bl1nwYNGgSHDh3qbk+bNs09z+TJk0P32bNnT/D4448PDhgwwN1etGhRsGvXrsE///wzw3PdcMMNwXPPPTd0W8+jssq3337rbus6Mz3/xRdfHGzVqlVw8+bNuXoNHVtdPJlfp3PnzsF27doF9+7dG7rPli1b3HG/5ZZbMjxmxIgRGV6rZcuW7vWy4z0uq4seu2bNmtB9v/zyS1cHtm3bluE52rdvH/pMVq5c6R6rz0Deeuut4LXXXus+O49+bty4cfDBBx/M8Ji77rorw/N269bNPbf3fo899tjgoEGDMtznkUceCdU11UHdP/w4LV++PFi/fv3gpEmTgvuj/SeddFLovevnXr16Bb/66qsM97vooouCHTp0cPXc87///S/YunXr4Pr164O33npr8OSTT85wjPS7os+7U6dOGd7vfffdl+G577jjjuBpp52W4bGbNm1yx2rIkCH7LT8AoGAxphsA4Au1JGZuiY2NjbXTTjvNBgwY4Fr01PK6Zs0a1xqoVlOPuharxVRdw9Wy6Klfv37o56OOOsoqV67suk6r2626LqsF8O6773b79dya9EpdfsMdeuihrkty5pZEbfMEAgH33F53Zb3uq6++6lp41R14xYoVrpVy+fLlGcqdU5r5Wt29X3/9datQoUK+vYbKq67l6i2gngDhXb/VZV49BbJ7z3LIIYdk6KKdHc1A7322KSkproVVLchqTVYLfFJSkmvB10UT6Ol96P2oO7S6b6slOytqKddlz549riVXj9Gke2pJ1vOEyzyOXWXXrOKiIQY6ZpnHVqs1WdT6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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize balance distribution\n", "plt.figure(figsize=(10, 6))\n", "plt.hist(list(balance_scores.values()), bins=30, edgecolor='black', alpha=0.7, color='seagreen')\n", "plt.xlabel('Personalization Balance Score', fontsize=12)\n", "plt.ylabel('Number of Users', fontsize=12)\n", "plt.title('Distribution of Personalization Balance', fontsize=14, fontweight='bold')\n", "plt.axvline(0.5, color='red', linestyle='--', linewidth=2, label='Perfect Balance')\n", "plt.legend()\n", "plt.grid(True, alpha=0.3)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "In this tutorial, you learned:\n", "\n", "✓ How to measure profile similarity across the network\n", "✓ Computing recommendation system metrics (engagement momentum, personalization balance) \n", "\n", "## Next Steps\n", "\n", "- **Visualization Tutorial**: Create publication-ready visualizations using ySights' viz module" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12" } }, "nbformat": 4, "nbformat_minor": 4 }