2025-02-16 16:41:38 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"games.csv - датасет игр из steam"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(\"..//static//csv//games.csv\")\n",
"\n",
"# df['date_release'] = pd.to_datetime(df['date_release'])\n",
"# # Разделение даты на год, месяц и день\n",
"# df['year'] = df['date_release'].dt.year\n",
"# df['month'] = df['date_release'].dt.month\n",
"# df['day'] = df['date_release'].dt.day\n",
"\n",
"# # Удаляем исходный столбец 'date', если он больше не нужен\n",
"# df.drop('date', axis=1, inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Входные переменные: user_reviews (кол-во отзывов игроков; reviews в коде), price_original (цена на момент выхода; price в коде)\n",
"\n",
"Выходная перменная: positive_ratio (отношение положительных отзывов к негативным; pos в коде)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime as dt\n",
"from datetime import timedelta\n",
"\n",
"import matplotlib.pyplot as plt\n",
"from skfuzzy import control as ctrl\n",
"import skfuzzy as fuzz\n",
"\n",
"#входная переменная кол-ва отзывов с таким универсумом (от 0 до 100k)\n",
"reviews = ctrl.Antecedent(np.arange(0, 100000, 1), \"reviews\")\n",
"\n",
"#входная переменная цены с таким универсумом (от 0 до 100 долларов)\n",
"price = ctrl.Antecedent(np.arange(0, 100, 0.01), \"price\")\n",
"\n",
"#удалить пару игр, у которых цена больше 100 долларов, чтобы графики норм. были\n",
"df = df[df['price_original'] <= 100]\n",
"\n",
"#удалить несколько игр, у которых больше 100k отзывов, чтобы графики норм. были\n",
"df = df[df['user_reviews'] <= 100000]\n",
"\n",
"#выходная переменная позитивности с таким универсумом (от 0 до 100)\n",
"pos = ctrl.Consequent(np.arange(0, 100, 1), \"pos\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Лингвистические переменные и их визуализация"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\AI labs\\aimenv\\Lib\\site-packages\\skfuzzy\\control\\fuzzyvariable.py:125: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGyCAYAAAAYveVYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACBZElEQVR4nO3dd3RU1dfG8e+k904aBELvvUlHifRqQ0RFrPQmiiBFRIoiilIVxY5go0PovffeW2ihhoSEkDb3/eNKXvOjpczMmZnsz1pZyuTOvU9mINk595yzDZqmaQghhBBC2AkH1QGEEEIIIUxJihshhBBC2BUpboQQQghhV6S4EUIIIYRdkeJGCCGEEHZFihshhBBC2BUpboQQQghhV6S4EUIIIYRdkeJGCCGEEHYl3xU3mqaRkJCAbMwshBBC2Celxc369etp06YN4eHhGAwG5s2b99jnrF27lmrVquHq6kqJEiX48ccfc3TN27dv4+vry+3bt3MXWgghhBBWTWlxk5SUROXKlZkyZUq2jj9z5gytWrXiySefZO/evfTr148333yTZcuWmTmpEEIIIWyFwVoaZxoMBubOnUv79u0fesygQYNYvHgxBw8ezHzsxRdf5NatW0RHR2frOgkJCfj6+hIfH4+Pj09eYwshhBDCyjipDpATW7ZsISoqKstjzZo1o1+/fg99TkpKCikpKZl/TkhIAGDc0qMM61AddxdHs2QVQihwaB7s+A5enAVu8suLELYkzZjG6VunORZ3jAu3L3Ax8SKxSbHcTr3NnfQ7JKUlseaFNdk6l00VN7GxsYSEhGR5LCQkhISEBJKTk3F3d7/vOWPHjmXkyJH3Pf7XrvOcTTDy8+u1cHLMd/OqhbA/8Rfhzy76/y8fCm2/VptHCPFIKRkp7Lm6h82XNrMzdifHbh4j1ZgKQJB7EAW9ChLmGUakTySezp64O9//M/5hbKq4yY3BgwczYMCAzD8nJCQQERHBtM7VeXvOYaasOUXfqJIKEwoh8kzTYEEv8A6D2t1g5Qgo2xZKRj3+uUIIi7mbfpf1F9az9MxSNl7cyN2MuwS6BVI7rDYti7akXGA5ygSUwcPZI0/XsaniJjQ0lCtXrmR57MqVK/j4+Dxw1AbA1dUVV1fX+x6vWTSAtxsWY9q6k3SsGUGor5tZMgshLGDXD3BqNXT+G0o0gTPr9WKnxxZw91edToh879jNY/x+9Heiz0aTlJZEucBydKvcjfoF61PKvxQGg8Gk17Op4qZOnTosWbIky2MrVqygTp06uTpf98bFmb09hm/Wn2JEm/KmiCiEsLSbZ2DZUKjW5f9HatpOgql1YOkH8Mw3avMJkU8ZNSOrYlbx6+Ff2X11NyEeIXQp14UWRVsQ6Rtp1msrnWySmJjI3r172bt3L6Av9d67dy8xMTGAfkvp1VdfzTy+W7dunD59mvfff5+jR48ydepU/vjjD/r375+r6/u4OfNS7cL8tfMCSSnpef56hBAWZjTC/F7gEQjNRv//474FoeVnsH82HFmkLp8Q+ZBRM7L87HKeXfAsA9YOwGAwMKHRBKKfjaZ7le5mL2xAcXGzc+dOqlatStWqVQEYMGAAVatWZfjw4QBcvnw5s9ABKFq0KIsXL2bFihVUrlyZCRMm8N1339GsWbNcZ+hcuwhJqeks2Hcpb1+MEMLytn8D5zZC+yng6p31c5U6QulWsKgfJF1XEk+I/Gbzpc08t/A53l33LsEewfzS4hd+bP4jTSOb4uRguZtFVrPPjaU8aJ+bV77fRnqGxu9vP6E4nRAi266fgOn19dtRLT978DGJV2FKbSjaAJ7/CUx8X18IoTufcJ7Pdn7G2vNrqRZcjf7V+1MluIqyPLIGGmhdKYxtZ25w9fZd1VGEENmRkQ7zuoNPQYj66OHHeQVD6y/g8Hw4+LfF4gmRX6RlpDFt7zTazW/H0ZtHGd9wPD82/1FpYQNS3ADQrHwoDgYDyw7Gqo4ihMiOzV/DxV3Qfhq4PGbJaPkOUOFZWPwu3JZ/40KYyqEbh3hx8Yt8s/8bXiv/GgvaL6B50eYmX/mUG1LcAH4eLtSI9Gfd8WuqowghHufKIVg7Fur2hsK1s/eclp+Dkyss7KvviSOEyLV0YzqT9kyi8+LOOBgc+L3V7/Sp1gd3p+xvsmduUtz8q2GpAmw+dYPUdKPqKEKIh8lIg7ndIKAYNB6S/ed5BECbr+B4NOz9zXz5hLBzlxMv0zW6K98f+J53Kr/DrFazKBtYVnWs+0hx86+GJQtwJzWDneduqo4ihHiY9Z/rIzcdpoNzDjfeLN0CqnSG6MFw67x58glhx9bErOG5hc8ReyeWH5r/QPfK3XF2cFYd64GkuPlXuTAfgrxc2XBClowKYZUu7YH146HhQAivmrtzNB8Lrj767sVye0qIbDFqRr7e/TV91vShWkg1/mrzF1WDc/lv0EKkuPmXg4OB2sUC2HFGRm6EsDrpKTC3O4SUhwYDc38eN19oNwlOr4Wd35ssnhD2KiktiX5r+vHdge/oV60fXz/5Nb6uvqpjPZYUN/9Rs4g/+y/EczctQ3UUIcR/rRkDN07qt6OcXPJ2ruJPQY03YPkwuHnaNPmEsEMXbl/g5SUvsz12O5OemsQbFd+wipVQ2SHFzX/UiAwgNcPIgYvxqqMIIe45v11f+v3kEH3kxhSe/ljfA2deTzDKLzNC/K/DNw7TeUln7qbf5dcWv9IoopHqSDkixc1/lAn1xtPFkZ1n41RHEUIApN7RV0eFV4O6fUx3XlcvaDcVYrbA1mmmO68QdmDr5a10je5KQa+CzGo1ixL+JVRHyjEpbv7DydGBqoX92XFW5t0IYRVWjYSEi/rtKEcT96WJrAdP9IBVH8O1Y6Y9txA2KvpsND1W9qBqcFW+a/od/m7+qiPlihQ3/6NaYT/2nb9FPmu5JYT1ObMetk2HJiMgqKR5rtFkGPgV1keHMtLNcw0hbMTfx//m/XXv0zSyKZOemoSH82N2/7ZiUtz8j/IFfbmRlEpsgvSZEkKZlNswvycUqQ+1u5nvOs7u+qjQ5b2waaL5riOElfvz+J98tOUjXij9AmPqj8HZ0Tr3r8kuKW7+R8WC+hK3gxcTFCcRIh9bPhSSbkC7yeBg5m9ThWpA/f6wdhzEHjDvtYSwQn8c+4OPt3xMpzKd+LD2hzgYbL80sP2vwMTCfN0I9HSRFVNCqHJiJez6EZp9AgFFLXPNRoMgqJS+l056qmWuKYQVmHN0DqO2jqJz2c4MrjXYZpZ6P44UN//DYDBQoaAvh6S4EcLykuNgQW99L5rqXS13XSdX/fbUtSOw/jPLXVcIhRacWsAn2z7h5bIvM6jmILspbECKmweqUNBHRm6EUGHpB5CaBG0ngaW/0YZV0kdwNnwBF3dZ9tpCWNiamDUM3zScZ0s+y/s137erwgakuHmgigV9uXo7hasyqVgIyzmyCPbPhhbjwLeQmgz1++tFztzukCb//oV92hG7g4HrBvJkxJMMe2KY3RU2IMXNA5UJ9QHg2JXbipMIkU8k3YBF/aB0S6jcSV0OR2doPx3izsKaT9TlEMJMjtw4Qp/VfagaUpVPG36Ko4Oj6khmIcXNA0QEeODm7MDxK4mqowhh/zQNFvcHYzq0nmj521H/K7gMPDUUNk+Gc1vUZhHChC4nXqbHqh5E+kTy1ZNf4eKYxz5tVkyKmwdwdDBQItiL47EyciOE2R38Gw7Ph1ZfgHeI6jS6Oj0hojbM667PARLCxiWmJtJzdU9cHV2Z3GQyns6eqiOZlRQ3D1EqxJvjV6W4EcKsbsfCkoFQvgNUeEZ1mv/n4Ajtp0LiFVgxQnUaIfIk3ZjOwPUDuZx4mSlNphDoHqg6ktlJcfMQpUK8OR57W9owCGEumgYL+4KDM7ScoDrN/QKLQ9RI2DEDTq9VnUaIXNE0jXHbx7H10lYmNJ5Acb/iqiNZhBQ3D1E6xJuk1Awu3kpWHUUI+7R3FhyPhjZfgaeV/iZZ800o2hDm94K7smu5sD2zjs5izrE5DH1iKHXD66qOYzFS3DxEyRAvAE7IpGIhTC/+AkR/AJVfgjItVad5OAc
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#ЛИНГВИСТИЧЕСКАЯ ПЕР. КОЛ-В О ОТЗЫВОВ\n",
"\n",
"#определял примерные диапазоны для кол-ва отзывов с помощью boxplot:\n",
"# plt.figure(figsize=(12, 8))\n",
"# df_temp = df[df['user_reviews'] < 100000] \n",
"# plt.boxplot(x=df_temp['user_reviews'])\n",
"# plt.show()\n",
"\n",
"#автоматическое формирование нечёт. переменной отзывов, но с поправкой для many (s - ф-ия) \n",
"reviews.automf(3, variable_type=\"quant\", names=['few', 'avg', 'many'])\n",
"reviews[\"few\"] = fuzz.zmf(reviews.universe, 0, 10000)\n",
"\n",
"reviews[\"many\"] = fuzz.smf(reviews.universe, reviews.universe.max()/2, reviews.universe.max())\n",
"reviews.view()\n",
"\n",
"#СТАРЫЙ КОД\n",
"#---------------------------------------------------------------------------\n",
"# #до 15 обзоров - мало\n",
"# #z-функция\n",
"# reviews[\"few\"] = fuzz.zmf(reviews.universe, 0, 15)\n",
"\n",
"# #10-40 обзоров - средне\n",
"# #треуг. ф-ия\n",
"# # 10 - левая вершина треугольника\n",
"# # 25 - верхняя вершина\n",
"# # 40 - правая вершина\n",
"# reviews[\"average\"] = fuzz.trimf(reviews.universe, [10, 25, 40]) \n",
"\n",
"# #больше 30 обзоров - много\n",
"# #s-функция\n",
"# reviews[\"many\"] = fuzz.smf(reviews.universe, 30, reviews.universe.max())\n",
"\n",
"# reviews.view()\n",
"\n",
"#---------------------------------------------------------------------------\n",
"\n",
"\n",
"\n",
"#ЛИНГВИСТИЧЕСКАЯ ПЕР. ЦЕНА\n",
"\n",
"#определял примерные диапазоны для цены с помощью boxplot:\n",
"# plt.figure(figsize=(12, 8))\n",
"# df_temp = df[df['price_original'] < 60]\n",
"# plt.boxplot(x=df_temp['price_original'])\n",
"# plt.show()\n",
"\n",
"#От 0 до 10 долларов можно считать дёшево (переводил на рубли)\n",
"#z-функция\n",
"# price[\"cheap\"] = fuzz.zmf(price.universe, 0, 10)\n",
"price[\"cheap\"] = fuzz.zmf(price.universe, 0, 12)\n",
"\n",
"#от 5 до 22 долларов можно считать средне (переводил на рубли)\n",
"#треуг. ф-ия\n",
"# 5 - левая вершина треугольника\n",
"# 15 - верхняя вершина\n",
"# 22 - правая вершина\n",
"# price[\"medium\"] = fuzz.trimf(price.universe, [5, 15, 22])\n",
"price[\"medium\"] = fuzz.trimf(price.universe, [5, 16, 22])\n",
"\n",
"#больше 15 долларов можно считать дорого (переводил на рубли)\n",
"#s-функция\n",
"price[\"expensive\"] = fuzz.smf(price.universe, 15, price.universe.max())\n",
"\n",
"price.view()\n",
"\n",
"\n",
"#ЛИНГВИСТИЧЕСКАЯ ПЕР. СООТНОШЕНИЕ ПОЛОЖ./НЕГАТИВ. ОТЗЫВОВ\n",
"#до 60% можно считать низким отношением позитивных к негативным\n",
"\n",
2025-02-16 16:42:54 +04:00
"pos[\"low\"] = fuzz.zmf(pos.universe, 0, 60)\n",
2025-02-16 16:41:38 +04:00
"\n",
2025-02-16 16:42:54 +04:00
"#от 50 до 80 можно считать средним\n",
"pos[\"avg\"] = fuzz.trimf(pos.universe, [50, 70, 80])\n",
2025-02-16 16:41:38 +04:00
"\n",
2025-02-16 16:42:54 +04:00
"#от 75 можно считать высоким\n",
"pos[\"high\"] = fuzz.smf(pos.universe, 75, 100)\n",
2025-02-16 16:41:38 +04:00
"\n",
"\n",
"\n",
"pos.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## База нечётких правил"
]
},
{
"cell_type": "code",
2025-02-16 16:42:54 +04:00
"execution_count": 33,
2025-02-16 16:41:38 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" user_reviews price_original positive_ratio\n",
"15251 46 0.99 95\n",
"13770 491 6.99 83\n",
"21390 365 0.00 76\n",
"16365 55 2.99 96\n",
"49100 78 0.00 74\n",
"... ... ... ...\n",
"2652 55 14.99 74\n",
"30351 41 9.99 82\n",
"1810 4598 59.99 92\n",
"27959 115 2.99 73\n",
"2864 15 4.99 86\n",
"\n",
"[10142 rows x 3 columns]\n"
]
},
{
"data": {
"application/vnd.microsoft.datawrangler.viewer.v0+json": {
"columns": [
{
"name": "index",
"rawType": "int64",
"type": "integer"
},
{
"name": "user_reviews",
"rawType": "int64",
"type": "integer"
},
{
"name": "price_original",
"rawType": "float64",
"type": "float"
},
{
"name": "positive_ratio",
"rawType": "int64",
"type": "integer"
},
{
"name": "positive_ratio_pred",
"rawType": "float64",
"type": "float"
}
],
"conversionMethod": "pd.DataFrame",
2025-02-16 16:42:54 +04:00
"ref": "ef5067fd-ef97-48d3-a20a-5506a12af29b",
2025-02-16 16:41:38 +04:00
"rows": [
[
"15251",
"46",
"0.99",
"95",
"92.04448967992606"
],
[
"13770",
"491",
"6.99",
"83",
"74.78591007701688"
],
[
"21390",
"365",
"0.0",
"76",
"91.64031295698327"
],
[
"16365",
"55",
"2.99",
"96",
"91.73922119826041"
],
[
"49100",
"78",
"0.0",
"74",
"92.01041272015634"
],
[
"4586",
"310",
"9.99",
"64",
"66.3556049919213"
],
[
"44242",
"45",
"4.99",
"55",
"90.80660919873473"
],
[
"34788",
"24",
"4.99",
"54",
"90.84473436906006"
],
[
"8555",
"450",
"17.99",
"92",
"66.15407457648809"
],
[
"14595",
"121",
"7.99",
"96",
"69.7335265397698"
],
[
"45078",
"560",
"0.0",
"91",
"91.39376995217687"
],
[
"34398",
"16",
"9.99",
"68",
"66.1221026320288"
],
[
"46955",
"10",
"0.0",
"80",
"92.0985091592291"
],
[
"38856",
"1641",
"0.0",
"22",
"90.03694508422274"
],
[
"37942",
"21",
"1.99",
"95",
"91.99602947132432"
],
[
"19348",
"821",
"9.99",
"88",
"66.75042744212811"
],
[
"3275",
"16",
"3.99",
"68",
"91.42535889257933"
],
[
"28638",
"17",
"1.99",
"88",
"92.00129380941671"
],
[
"17103",
"402",
"6.99",
"80",
"74.78591007701688"
],
[
"28406",
"387",
"0.0",
"94",
"91.61226307226815"
],
[
"43863",
"11",
"0.0",
"81",
"92.09720879881196"
],
[
"25901",
"35",
"14.99",
"88",
"66.68719377172118"
],
[
"6857",
"564",
"2.99",
"88",
"91.05371744461503"
],
[
"46341",
"131",
"0.0",
"88",
"91.94220828708754"
],
[
"44876",
"28",
"17.99",
"96",
"65.84753657346118"
],
[
"11451",
"86",
"14.99",
"89",
"66.7170428053464"
],
[
"27670",
"50",
"19.99",
"68",
"63.91979082569322"
],
[
"16976",
"548",
"1.99",
"80",
"91.31237690194502"
],
[
"26878",
"17",
"0.99",
"100",
"92.08214560105175"
],
[
"14773",
"1232",
"0.0",
"77",
"90.55162620039864"
],
[
"49833",
"22",
"14.99",
"100",
"66.67957254094878"
],
[
"38505",
"122",
"9.99",
"67",
"66.20683766026289"
],
[
"43580",
"873",
"0.0",
"86",
"90.99968195314106"
],
[
"4218",
"1648",
"3.99",
"97",
"89.13792450265012"
],
[
"26855",
"16",
"0.99",
"93",
"92.08344624744724"
],
[
"45102",
"10",
"0.0",
"90",
"92.0985091592291"
],
[
"11517",
"19",
"14.99",
"84",
"66.67781306410103"
],
[
"35603",
"11",
"3.99",
"54",
"91.43288531170177"
],
[
"32164",
"16",
"7.99",
"56",
"69.7335265397698"
],
[
"9740",
"123",
"9.99",
"82",
"66.20763409075975"
],
[
"50391",
"24",
"0.0",
"83",
"92.08031725509622"
],
[
"16492",
"696",
"19.99",
"86",
"64.71772943509656"
],
[
"37115",
"31",
"1.99",
"54",
"91.98287898755996"
],
[
"9948",
"68",
"2.99",
"91",
"91.72149391995458"
],
[
"35890",
"837",
"0.99",
"69",
"91.04059922851958"
],
[
"45995",
"19",
"0.0",
"57",
"92.08681111572254"
],
[
"19896",
"1084",
"19.99",
"84",
"65.17326840440721"
],
[
"12818",
"10",
"1.99",
"100",
"92.01051210610092"
],
[
"2729",
"744",
"7.99",
"88",
"69.7335265397698"
],
[
"38237",
"59",
"0.0",
"91",
"92.03496102642863"
]
],
"shape": {
"columns": 4,
"rows": 10142
}
},
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>user_reviews</th>\n",
" <th>price_original</th>\n",
" <th>positive_ratio</th>\n",
" <th>positive_ratio_pred</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>15251</th>\n",
" <td>46</td>\n",
" <td>0.99</td>\n",
" <td>95</td>\n",
" <td>92.044490</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13770</th>\n",
" <td>491</td>\n",
" <td>6.99</td>\n",
" <td>83</td>\n",
" <td>74.785910</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21390</th>\n",
" <td>365</td>\n",
" <td>0.00</td>\n",
" <td>76</td>\n",
" <td>91.640313</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16365</th>\n",
" <td>55</td>\n",
" <td>2.99</td>\n",
" <td>96</td>\n",
" <td>91.739221</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49100</th>\n",
" <td>78</td>\n",
" <td>0.00</td>\n",
" <td>74</td>\n",
" <td>92.010413</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2652</th>\n",
" <td>55</td>\n",
" <td>14.99</td>\n",
" <td>74</td>\n",
" <td>66.698909</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30351</th>\n",
" <td>41</td>\n",
" <td>9.99</td>\n",
" <td>82</td>\n",
" <td>66.142143</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1810</th>\n",
" <td>4598</td>\n",
" <td>59.99</td>\n",
" <td>92</td>\n",
" <td>24.863128</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27959</th>\n",
" <td>115</td>\n",
" <td>2.99</td>\n",
" <td>73</td>\n",
" <td>91.657627</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2864</th>\n",
" <td>15</td>\n",
" <td>4.99</td>\n",
" <td>86</td>\n",
" <td>90.861111</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10142 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" user_reviews price_original positive_ratio positive_ratio_pred\n",
"15251 46 0.99 95 92.044490\n",
"13770 491 6.99 83 74.785910\n",
"21390 365 0.00 76 91.640313\n",
"16365 55 2.99 96 91.739221\n",
"49100 78 0.00 74 92.010413\n",
"... ... ... ... ...\n",
"2652 55 14.99 74 66.698909\n",
"30351 41 9.99 82 66.142143\n",
"1810 4598 59.99 92 24.863128\n",
"27959 115 2.99 73 91.657627\n",
"2864 15 4.99 86 90.861111\n",
"\n",
"[10142 rows x 4 columns]"
]
},
2025-02-16 16:42:54 +04:00
"execution_count": 33,
2025-02-16 16:41:38 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rule1 = ctrl.Rule(reviews['many'] & price['cheap'], pos['high'])\n",
"rule2 = ctrl.Rule(reviews['many'] & price['medium'], pos['high']) #avg\n",
"rule3 = ctrl.Rule(reviews['many'] & price['expensive'], pos['high']) \n",
"\n",
"rule4 = ctrl.Rule(reviews['few'] & price['cheap'], pos['high']) #avg\n",
"rule5 = ctrl.Rule(reviews['few'] & price['medium'], pos['avg']) #avg\n",
"rule6 = ctrl.Rule(reviews['few'] & price['expensive'], pos['low'])\n",
"\n",
"rule7 = ctrl.Rule(reviews['avg'] & price['cheap'], pos['avg'])\n",
"rule8 = ctrl.Rule(reviews['avg'] & price['medium'], pos['high'])\n",
"rule9 = ctrl.Rule(reviews['avg'] & price['expensive'], pos['avg'])\n",
"\n",
"\n",
"\n",
"#ЗДЕСЬ ДОПОЛНИТЬ, ЕСЛИ БУДЕТ ДОП. ПРАВИЛО:\n",
"fuzzy_rules = [\n",
" rule1,\n",
" rule2,\n",
" rule3,\n",
" rule4,\n",
" rule5,\n",
" rule6,\n",
" rule7,\n",
" rule8,\n",
" rule9\n",
"]\n",
"\n",
"fuzzy_sys = ctrl.ControlSystemSimulation(ctrl.ControlSystem(fuzzy_rules))\n",
"\n",
"#Т У Т ПОМЕНЯТЬ НАЗВАНИЯ СТОЛБЦОВ И НЕЧЁТКИХ ПЕРЕМЕННЫХ Н А СВОИ\n",
"def fuzzy_pred(row):\n",
" # al - нечёт. пер. ; al2o3 - столбец датасета\n",
" fuzzy_sys.input[\"reviews\"] = row[\"user_reviews\"]\n",
" fuzzy_sys.input[\"price\"] = row[\"price_original\"]\n",
" fuzzy_sys.compute()\n",
" # return fuzzy_sys.output[\"positive_ratio\"]\n",
" return fuzzy_sys.output[\"pos\"]\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"#РАЗДЕЛИТЬ ДАТАСЕТ Н А ОБУЧАЮЩУЮ, ТЕСТОВУЮ ВЫБОРКИ\n",
"#Тестирование нечеткой системы на тестовой выборке\n",
"# Разделение данных на обучающую и тестовую выборки\n",
"X = df[['user_reviews', 'price_original']]\n",
"y = df['positive_ratio']\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"\n",
"test = pd.concat([X_test, y_test], axis=1)\n",
"\n",
"\n",
"print(test)\n",
"\n",
"result_test = test.copy()\n",
"result_test[\"positive_ratio_pred\"] = result_test.apply(fuzzy_pred, axis=1)\n",
"result_test"
]
},
{
"cell_type": "code",
2025-02-16 16:42:54 +04:00
"execution_count": 34,
2025-02-16 16:41:38 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R^2 = -0.9549582516266943\n",
"RMSE = 25.637064888955464\n"
]
}
],
"source": [
"#Оценка\n",
"import math\n",
"from sklearn import metrics\n",
"print(f\"R^2 = {metrics.r2_score(result_test[\"positive_ratio\"], result_test[\"positive_ratio_pred\"])}\")\n",
"print(f\"RMSE = {math.sqrt(\n",
" metrics.mean_squared_error(result_test[\"positive_ratio\"], result_test[\"positive_ratio_pred\"])\n",
")}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценки показали, что нечёткая система очень плохо справляется с предсказанием соотношения положительных отзывов к негативным. \n",
"\n",
"Средняя квадратичная ошибка составляет почти 41%, что является большой ошибкой для диапазона от 0 до 100. \n",
"\n",
"Коэффициент детерминации получился отрицательным. Это означает, что система работает хуже, чем простое предсказание средним значением. Это говорит о том, что гипотезы о зависимости положительности отзывов от цены игры и количества отзывов, проявляемые в виде базы нечётких правил, неправильно отражают действительность. Возможно, что распределение отношений положительных отзывов к отрицательным имеет скорее случайный характер, поэтому оно не может быть описано с хорошей точностью нечёткими правилами"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "aimenv",
"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.12.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}