2025-02-16 16:41:38 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"games.csv - датасет игр из steam"
]
},
{
"cell_type": "code",
2025-02-16 18:04:40 +04:00
"execution_count": 70,
2025-02-16 16:41:38 +04:00
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
2025-02-21 23:40:54 +04:00
"execution_count": null,
2025-02-16 16:41:38 +04:00
"metadata": {},
"outputs": [],
"source": [
2025-02-21 23:40:54 +04:00
"df = pd.read_csv(\"..//static//csv//games.csv\")"
2025-02-16 16:41:38 +04:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Входные переменные: user_reviews (кол-во отзывов игроков; reviews в коде), price_original (цена на момент выхода; price в коде)\n",
"\n",
"Выходная перменная: positive_ratio (отношение положительных отзывов к негативным; pos в коде)"
]
},
{
"cell_type": "code",
2025-02-16 18:04:40 +04:00
"execution_count": 72,
2025-02-16 16:41:38 +04:00
"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",
2025-02-21 23:40:54 +04:00
"execution_count": null,
2025-02-16 16:41:38 +04:00
"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": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2025-02-16 16:51:10 +04:00
"image/png": "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
2025-02-16 16:41:38 +04:00
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2025-02-16 16:51:10 +04:00
"image/png": "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
2025-02-16 16:41:38 +04:00
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#ЛИНГВИСТИЧЕСКАЯ ПЕР. КОЛ-В О ОТЗЫВОВ\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",
"#ЛИНГВИСТИЧЕСКАЯ ПЕР. ЦЕНА\n",
"\n",
2025-02-21 23:40:54 +04:00
"#От 0 до 12 долларов можно считать дёшево (переводил на рубли)\n",
2025-02-16 16:41:38 +04:00
"#z-функция\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, 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",
2025-02-16 16:51:10 +04:00
"pos.automf(5, variable_type=\"quant\")\n",
2025-02-16 16:41:38 +04:00
"\n",
"\n",
"pos.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## База нечётких правил"
]
},
{
"cell_type": "code",
2025-02-21 23:40:54 +04:00
"execution_count": null,
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 18:04:40 +04:00
"ref": "6df9d4d6-0a40-404e-b085-39cbd7b0c963",
2025-02-16 16:41:38 +04:00
"rows": [
[
"15251",
"46",
"0.99",
"95",
2025-02-16 16:51:10 +04:00
"74.20947677900149"
2025-02-16 16:41:38 +04:00
],
[
"13770",
"491",
"6.99",
"83",
2025-02-16 16:51:10 +04:00
"74.2664254885942"
2025-02-16 16:41:38 +04:00
],
[
"21390",
"365",
"0.0",
"76",
2025-02-16 16:51:10 +04:00
"73.97023837640037"
2025-02-16 16:41:38 +04:00
],
[
"16365",
"55",
"2.99",
"96",
2025-02-16 16:51:10 +04:00
"74.20189499201257"
2025-02-16 16:41:38 +04:00
],
[
"49100",
"78",
"0.0",
"74",
2025-02-16 16:51:10 +04:00
"74.18496967806658"
2025-02-16 16:41:38 +04:00
],
[
"4586",
"310",
"9.99",
"64",
2025-02-16 16:51:10 +04:00
"84.72672777048702"
2025-02-16 16:41:38 +04:00
],
[
"44242",
"45",
"4.99",
"55",
2025-02-16 16:51:10 +04:00
"74.20491838793168"
2025-02-16 16:41:38 +04:00
],
[
"34788",
"24",
"4.99",
"54",
2025-02-16 16:51:10 +04:00
"74.2232467570519"
2025-02-16 16:41:38 +04:00
],
[
"8555",
"450",
"17.99",
"92",
2025-02-16 18:04:40 +04:00
"89.20378747679185"
2025-02-16 16:41:38 +04:00
],
[
"14595",
"121",
"7.99",
"96",
2025-02-16 16:51:10 +04:00
"76.49966400675864"
2025-02-16 16:41:38 +04:00
],
[
"45078",
"560",
"0.0",
"91",
2025-02-16 16:51:10 +04:00
"73.82931758417166"
2025-02-16 16:41:38 +04:00
],
[
"34398",
"16",
"9.99",
"68",
2025-02-16 16:51:10 +04:00
"85.42844449685683"
2025-02-16 16:41:38 +04:00
],
[
"46955",
"10",
"0.0",
"80",
2025-02-16 16:51:10 +04:00
"74.23717681900094"
2025-02-16 16:41:38 +04:00
],
[
"38856",
"1641",
"0.0",
"22",
2025-02-16 16:51:10 +04:00
"73.06882776782535"
2025-02-16 16:41:38 +04:00
],
[
"37942",
"21",
"1.99",
"95",
2025-02-16 16:51:10 +04:00
"74.22868958622409"
2025-02-16 16:41:38 +04:00
],
[
"19348",
"821",
"9.99",
"88",
2025-02-16 16:51:10 +04:00
"83.59162281862363"
2025-02-16 16:41:38 +04:00
],
[
"3275",
"16",
"3.99",
"68",
2025-02-16 16:51:10 +04:00
"74.23171221729174"
2025-02-16 16:41:38 +04:00
],
[
"28638",
"17",
"1.99",
"88",
2025-02-16 16:51:10 +04:00
"74.23178016627038"
2025-02-16 16:41:38 +04:00
],
[
"17103",
"402",
"6.99",
"80",
2025-02-16 16:51:10 +04:00
"74.37570023984736"
2025-02-16 16:41:38 +04:00
],
[
"28406",
"387",
"0.0",
"94",
2025-02-16 16:51:10 +04:00
"73.95414697781476"
2025-02-16 16:41:38 +04:00
],
[
"43863",
"11",
"0.0",
"81",
2025-02-16 16:51:10 +04:00
"74.23640532181939"
2025-02-16 16:41:38 +04:00
],
[
"25901",
"35",
"14.99",
"88",
2025-02-16 16:51:10 +04:00
"90.63930717743074"
2025-02-16 16:41:38 +04:00
],
[
"6857",
"564",
"2.99",
"88",
2025-02-16 16:51:10 +04:00
"73.82008368047197"
2025-02-16 16:41:38 +04:00
],
[
"46341",
"131",
"0.0",
"88",
2025-02-16 16:51:10 +04:00
"74.14463553064346"
2025-02-16 16:41:38 +04:00
],
[
"44876",
"28",
"17.99",
"96",
2025-02-16 18:04:40 +04:00
"89.60745365568543"
2025-02-16 16:41:38 +04:00
],
[
"11451",
"86",
"14.99",
"89",
2025-02-16 16:51:10 +04:00
"90.57851655246775"
2025-02-16 16:41:38 +04:00
],
[
"27670",
"50",
"19.99",
"68",
2025-02-16 18:04:40 +04:00
"86.68910788534616"
2025-02-16 16:41:38 +04:00
],
[
"16976",
"548",
"1.99",
"80",
2025-02-16 16:51:10 +04:00
"73.83684137272655"
2025-02-16 16:41:38 +04:00
],
[
"26878",
"17",
"0.99",
"100",
2025-02-16 16:51:10 +04:00
"74.23178244254356"
2025-02-16 16:41:38 +04:00
],
[
"14773",
"1232",
"0.0",
"77",
2025-02-16 16:51:10 +04:00
"73.35468135027476"
2025-02-16 16:41:38 +04:00
],
[
"49833",
"22",
"14.99",
"100",
2025-02-16 16:51:10 +04:00
"90.6548717946924"
2025-02-16 16:41:38 +04:00
],
[
"38505",
"122",
"9.99",
"67",
2025-02-16 16:51:10 +04:00
"85.17071414705808"
2025-02-16 16:41:38 +04:00
],
[
"43580",
"873",
"0.0",
"86",
2025-02-16 16:51:10 +04:00
"73.60777194587104"
2025-02-16 16:41:38 +04:00
],
[
"4218",
"1648",
"3.99",
"97",
2025-02-16 16:51:10 +04:00
"73.00862449061341"
2025-02-16 16:41:38 +04:00
],
[
"26855",
"16",
"0.99",
"93",
2025-02-16 16:51:10 +04:00
"74.23255328168158"
2025-02-16 16:41:38 +04:00
],
[
"45102",
"10",
"0.0",
"90",
2025-02-16 16:51:10 +04:00
"74.23717681900094"
2025-02-16 16:41:38 +04:00
],
[
"11517",
"19",
"14.99",
"84",
2025-02-16 16:51:10 +04:00
"90.65846762335833"
2025-02-16 16:41:38 +04:00
],
[
"35603",
"11",
"3.99",
"54",
2025-02-16 16:51:10 +04:00
"74.23576480487064"
2025-02-16 16:41:38 +04:00
],
[
"32164",
"16",
"7.99",
"56",
2025-02-16 16:51:10 +04:00
"76.68576266295884"
2025-02-16 16:41:38 +04:00
],
[
"9740",
"123",
"9.99",
"82",
2025-02-16 16:51:10 +04:00
"85.16830848356211"
2025-02-16 16:41:38 +04:00
],
[
"50391",
"24",
"0.0",
"83",
2025-02-16 16:51:10 +04:00
"74.22638605426216"
2025-02-16 16:41:38 +04:00
],
[
"16492",
"696",
"19.99",
"86",
2025-02-16 18:04:40 +04:00
"86.10011067019401"
2025-02-16 16:41:38 +04:00
],
[
"37115",
"31",
"1.99",
"54",
2025-02-16 16:51:10 +04:00
"74.22097099873041"
2025-02-16 16:41:38 +04:00
],
[
"9948",
"68",
"2.99",
"91",
2025-02-16 16:51:10 +04:00
"74.1917872528175"
2025-02-16 16:41:38 +04:00
],
[
"35890",
"837",
"0.99",
"69",
2025-02-16 16:51:10 +04:00
"73.63302720049518"
2025-02-16 16:41:38 +04:00
],
[
"45995",
"19",
"0.0",
"57",
2025-02-16 16:51:10 +04:00
"74.23023737869836"
2025-02-16 16:41:38 +04:00
],
[
"19896",
"1084",
"19.99",
"84",
2025-02-16 18:04:40 +04:00
"85.49351318658027"
2025-02-16 16:41:38 +04:00
],
[
"12818",
"10",
"1.99",
"100",
2025-02-16 16:51:10 +04:00
"74.23719300952487"
2025-02-16 16:41:38 +04:00
],
[
"2729",
"744",
"7.99",
"88",
2025-02-16 16:51:10 +04:00
"75.46558507027298"
2025-02-16 16:41:38 +04:00
],
[
"38237",
"59",
"0.0",
"91",
2025-02-16 16:51:10 +04:00
"74.19950502946304"
2025-02-16 16:41:38 +04:00
]
],
"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",
2025-02-16 16:51:10 +04:00
" <td>74.209477</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>13770</th>\n",
" <td>491</td>\n",
" <td>6.99</td>\n",
" <td>83</td>\n",
2025-02-16 16:51:10 +04:00
" <td>74.266425</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>21390</th>\n",
" <td>365</td>\n",
" <td>0.00</td>\n",
" <td>76</td>\n",
2025-02-16 16:51:10 +04:00
" <td>73.970238</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>16365</th>\n",
" <td>55</td>\n",
" <td>2.99</td>\n",
" <td>96</td>\n",
2025-02-16 16:51:10 +04:00
" <td>74.201895</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>49100</th>\n",
" <td>78</td>\n",
" <td>0.00</td>\n",
" <td>74</td>\n",
2025-02-16 16:51:10 +04:00
" <td>74.184970</td>\n",
2025-02-16 16:41:38 +04:00
" </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",
2025-02-16 16:51:10 +04:00
" <td>90.615416</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>30351</th>\n",
" <td>41</td>\n",
" <td>9.99</td>\n",
" <td>82</td>\n",
2025-02-16 16:51:10 +04:00
" <td>85.367169</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>1810</th>\n",
" <td>4598</td>\n",
" <td>59.99</td>\n",
" <td>92</td>\n",
2025-02-16 18:04:40 +04:00
" <td>49.500000</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>27959</th>\n",
" <td>115</td>\n",
" <td>2.99</td>\n",
" <td>73</td>\n",
2025-02-16 16:51:10 +04:00
" <td>74.155404</td>\n",
2025-02-16 16:41:38 +04:00
" </tr>\n",
" <tr>\n",
" <th>2864</th>\n",
" <td>15</td>\n",
" <td>4.99</td>\n",
" <td>86</td>\n",
2025-02-16 16:51:10 +04:00
" <td>74.231120</td>\n",
2025-02-16 16:41:38 +04:00
" </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",
2025-02-16 16:51:10 +04:00
"15251 46 0.99 95 74.209477\n",
"13770 491 6.99 83 74.266425\n",
"21390 365 0.00 76 73.970238\n",
"16365 55 2.99 96 74.201895\n",
"49100 78 0.00 74 74.184970\n",
2025-02-16 16:41:38 +04:00
"... ... ... ... ...\n",
2025-02-16 16:51:10 +04:00
"2652 55 14.99 74 90.615416\n",
"30351 41 9.99 82 85.367169\n",
2025-02-16 18:04:40 +04:00
"1810 4598 59.99 92 49.500000\n",
2025-02-16 16:51:10 +04:00
"27959 115 2.99 73 74.155404\n",
"2864 15 4.99 86 74.231120\n",
2025-02-16 16:41:38 +04:00
"\n",
"[10142 rows x 4 columns]"
]
},
2025-02-16 18:04:40 +04:00
"execution_count": 74,
2025-02-16 16:41:38 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rule1 = ctrl.Rule(reviews['many'] & price['cheap'], pos['high'])\n",
2025-02-21 23:40:54 +04:00
"rule2 = ctrl.Rule(reviews['many'] & price['medium'], pos['high']) \n",
2025-02-16 16:41:38 +04:00
"rule3 = ctrl.Rule(reviews['many'] & price['expensive'], pos['high']) \n",
"\n",
2025-02-16 18:04:40 +04:00
"rule4 = ctrl.Rule(reviews['few'] & price['cheap'], pos['high']) \n",
2025-02-21 23:40:54 +04:00
"rule5 = ctrl.Rule(reviews['few'] & price['medium'], pos['higher'])\n",
"rule6 = ctrl.Rule(reviews['few'] & price['expensive'], pos['average'])\n",
2025-02-16 16:41:38 +04:00
"\n",
2025-02-16 16:51:10 +04:00
"rule7 = ctrl.Rule(reviews['avg'] & price['cheap'], pos['average'])\n",
2025-02-16 16:41:38 +04:00
"rule8 = ctrl.Rule(reviews['avg'] & price['medium'], pos['high'])\n",
2025-02-16 16:51:10 +04:00
"rule9 = ctrl.Rule(reviews['avg'] & price['expensive'], pos['average'])\n",
2025-02-16 16:41:38 +04:00
"\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",
2025-02-16 18:04:40 +04:00
"\n",
2025-02-16 16:41:38 +04:00
"def fuzzy_pred(row):\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[\"pos\"]\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
2025-02-21 23:40:54 +04:00
"\n",
2025-02-16 16:41:38 +04:00
"#Тестирование нечеткой системы на тестовой выборке\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 18:04:40 +04:00
"execution_count": 75,
2025-02-16 16:41:38 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2025-02-16 18:04:40 +04:00
"R^2 = -0.29858167190494145\n",
"RMSE = 20.894606342915804\n"
2025-02-16 16:41:38 +04:00
]
}
],
"source": [
"#Оценка\n",
"import math\n",
"from sklearn import metrics\n",
2025-02-16 18:04:40 +04:00
"print(f\"R^2 = {metrics.r2_score(test[\"positive_ratio\"], result_test[\"positive_ratio_pred\"])}\")\n",
2025-02-16 16:41:38 +04:00
"print(f\"RMSE = {math.sqrt(\n",
2025-02-16 18:04:40 +04:00
" metrics.mean_squared_error(test[\"positive_ratio\"], result_test[\"positive_ratio_pred\"])\n",
2025-02-16 16:41:38 +04:00
")}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2025-02-16 16:51:10 +04:00
"Оценки показали, что построенная нечёткая система плохо справляется с предсказанием соотношения положительных отзывов к негативным. \n",
"\n",
2025-02-16 18:04:40 +04:00
"Средняя квадратичная ошибка составляет примерно 20%, что является достаточно большой ошибкой для диапазона от 0 до 100. \n",
2025-02-16 16:51:10 +04:00
"\n",
"Коэффициент детерминации получился отрицательным. Это означает, что система работает хуже, чем простое предсказание средним значением. Это говорит о том, что гипотезы о зависимости положительности отзывов от цены игры и количества отзывов, проявляемые в виде базы нечётких правил, неправильно отражают действительность. \n",
2025-02-16 16:41:38 +04:00
"\n",
"\n",
2025-02-16 16:51:10 +04:00
"Возможно, что распределение отношений положительных отзывов к отрицательным имеет скорее случайный характер, поэтому оно не может быть описано с хорошей точностью нечёткими правилами"
2025-02-16 16:41:38 +04:00
]
2025-02-21 23:40:54 +04:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"P.S. Было сделано более 5 попыток улучшить показатели засчёт изменения графиков функций и правил, но коэф. детерминации каждый раз всё равно был отрицательным (ещё больше по модулю, чем в данный момент)"
]
2025-02-16 16:41:38 +04:00
}
],
"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
}