877 lines
145 KiB
Plaintext
877 lines
145 KiB
Plaintext
|
{
|
|||
|
"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": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGyCAYAAAAYveVYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB09ElEQVR4nO3dd3iT9frH8Xc6ko50j7RASwGZyt4ggoqCCuo5R0VE4SCgqAiIILIVkOJAUUERFCcI4k88KjgQAUUZMmXJbC2rA5runTy/P0IjlQIdSZ6M+3VdXKXJk+Ruo/TT77o1iqIoCCGEEEK4CS+1CxBCCCGEsCUJN0IIIYRwKxJuhBBCCOFWJNwIIYQQwq1IuBFCCCGEW5FwI4QQQgi3IuFGCCGEEG5Fwo0QQggh3IqEGyGEEEK4FY8LN4qikJOTgxzMLIQQQrgnVcPNzz//TP/+/alTpw4ajYYvv/zyqo/ZuHEj7dq1Q6fTcc011/DBBx9U6zVzc3MJCQkhNze3ZkULIYQQwqmpGm7y8/Np3bo1CxcurNL1SUlJ3HHHHdx4443s2bOHsWPHMnz4cL7//ns7VyqEEEIIV6FxlsaZGo2G1atXc/fdd1/2mokTJ7JmzRr2799vve3+++8nKyuL7777rkqvk5OTQ0hICNnZ2QQHB9e2bCGEEEI4GR+1C6iOLVu20Lt37wq39enTh7Fjx172McXFxRQXF1s/z8nJAWDut38y7V/t8dd626VWl2c2wUd3wc0zIK6j2tUIIYRwE2XmMlLzU0krSCOzKJPMwkzOF50nsyiTrOIsCkoLKCgroLCskILSAopMRZjMJsyKmY0DNlbpNVwq3KSmpmIwGCrcZjAYyMnJobCwEH9//0sek5iYyPPPP3/J7Z/vPElyjpmPHu6Ej7fHrau+upwzkPwLnNwq4UYIIUS1KIrC2fyzHMs6xlHjUVJyUzide5pTeadIzU/FpJis1/pofAj3CyfcP5wQXQgBPgHEBMbg7+NPgE8Afj5++Gh88NJU/We1S4Wbmpg0aRLjxo2zfp6Tk0NcXBxvD2rPIysPsmDDMcb2bqJihU7KmGT5mJembh1CCCGcmlkxcyLrBPvO7WPfuX0cMR7hWNYx8kvzAQj0DSQhOIG6+rq0iGxBPX096unrERMYQ4R/BEHaoGoFl6pwqXATExNDWlrFH7ZpaWkEBwdXOmoDoNPp0Ol0l9zesUE4j9zQkEWbjnN/x3hiQvzsUrPLMiZbPuZKuBFCCPG3wrJCdqftZkfaDv449wf7z+0nvzQfDRoahTaiWXgzboy7kcZhjWkc2piYwBg0Go1Da3SpcNO1a1fWrl1b4bZ169bRtWvXGj3fY70a8en2FBZtOs5zd15rixLdR6aM3AghhIBScyn7z+1n69mtbDu7jb0ZeykzlxHuF07rqNYMbzmcVpGtuDbyWgJ9A9UuF1A53OTl5XHs2DHr50lJSezZs4fw8HDi4+OZNGkSp0+f5qOPPgJg5MiRLFiwgGeeeYaHH36Yn376ic8++4w1a9bU6PWD/Xx5oFM8H2/5iwl9mhKoc6msZ1/Waal0desQQgjhcDklOWw+tZmNJzey+fRmcktzCdIG0dHQkfEdxtMltgsNQxo6fESmqlT9ab5jxw5uvPFG6+fla2OGDBnCBx98wNmzZ0lJSbHe36BBA9asWcNTTz3F66+/Tr169Xj33Xfp06dPjWsY1KU+izYd56u9ZxjYKb7mX4y7sY7cpKpbhxBCCIfIKMjgh79+YEPKBnam7aRMKaN5eHMeavEQPer1oHl4c7y9XGOHsdOcc+MolZ1z89B72zCZFZaP6KJydU5kbn0IjITzx2BqOvhcum5JCCGEa8suzmbdX+v4Nulbfk/9HW8vb7rEduHGuBu5od4NxATGqF1ijcg8DNCvVSyTvthHRm4xUUHyQ5xCIxRlQbN+lnCTnwEh9dSuSgghhA2UmkvZdHIT/zv2Pzaf2YxZMdMpphPPd3uem+JvIkQXonaJtSbhBri1RQxTVu/nu/1neahrgtrlqK98SiquE+z5xLJjSsKNEEK4tOTsZL44+gX/O/4/MosyaRXZivEdxtMnoQ+R/pFql2dTEm6AsEAtHRLC2Hg4Q8IN/L0NPP7CLjTZMSWEEC6p1FTKD3/9wKojq9iZtpMQXQj9G/bn343/TeOwxmqXZzcSbi64oUkUC346RkmZGa2Ph59YbEwCv1CIaAQaLwk3QgjhYoxFRj4/8jkr/lxBemE6nWI68dINL3FT/E3ovN1/+YWEmwtuaBzFS98dZudfRro2ilC7HHVlJkFYAnh5Q2CUhBshhHARR41HWXZoGd+c+AaAfg378WDzB7km7BqVK3MsCTcXtIgNJiJQy89HMyTcGJMhvIHl7/poCTdCCOHk9mbsZckfS9h0ahPR/tGMbD2S/zT+D2F+YWqXpgoJNxd4eWno0iiC7UmZapeiPmMy1LvQLFMfIy0YhBDCCSmKwu+pv7N432K2nd1Gg5AGvHD9C9zW4DZ8vXzVLk9VEm4u0qF+GIlr/6So1ISfr2scVGRzZcWQfeqikRsDZPypbk1CCCGsFEXhtzO/sWjvIvZk7KFZeDPm9ZxH7/q9bd6A0lVJuLlIx4RwSkxm9p3OpmNCuNrlqCMrBVAsa24AggyQ9LOaFQkhhLhgT/oe5u+az860nbSKasXCmxfSo24Pp22DoBYJNxdpFhNEgNabHclGzw035dvAwy4auclLBUUB+Z9HCCFUcTjzMG/ufpNNpzbRNKyphJqrkHBzER9vL9rGh7Lzr0ygkdrlqCMzCby1EFzH8rk+GkwllhOL/T1zYZoQQqjlTN4Z3tj9BmtPrCUuKI6XbniJPgl9ZPrpKiTc/EP7+DCWbUtBURTPTMTGJAiNt2wDB8uCYrB0B5dwI4QQDlFQWsC7+97lwwMfEqILYVrXadx9zd0ev1C4qiTc/MN1dUM4n19Cak4RsSH+apfjeMbkv6ekwDJyA5CbClFNVSlJCCE8hVkx8/Xxr3l91+vklOTw3+v+y7DrhhHgG6B2aS5Fws0/tKxnaRi2/3SOZ4abzCRo0OPvz/UGy8e8dHXqEUIID7EnfQ8vbn+R/ef30yehD+Paj6OOvo7aZbkkCTf/EBPsR0Sgln2ns7mlhUHtchxLUSwjN+0e+vs2nR60ejnITwgh7CS7OJvXdr7G/x39P5qHN+eDvh/Q3tBe7bJcmoSbf9BoNFxbN4QDp7PVLsXx8tKgrLDitBRcOKU4VZ2ahBDCTSmKwjcnvuGVHa9QYiphSucp3NvkXry9PPScNRuScFOJ6+oE83+7TqldhuNlJlk+hv8z3BhkWkoIIWwoKTuJF7a+wLbUbdyWcBsTOk4gKiBK7bLchoSbSrSsG8JbG4+TnltEdJCf2uU4jvFCuAmtX/F2vcGyoFgIIUStlJpLWbpvKe/88Q6GAAOLei+ie93uapfldiTcVKJFnWAADp3N9axwk5lk2fqt/ceqfL0BMg6rU5MQQriJw5mHmfbrNI4YjzD0uqE82upR/Hw86GeMA0m4qURcWAB+vl4cTculZxMPGia8uBv4xYIMsqBYCCFqqNRcynv73uOdP94hITiBZbcv49rIa9Uuy61JuKmEl5eGxtFBHEnLVbsUxzImQUTjS2/XG6AwE8pKwEfr+LqEEMJFXTxa8/B1DzOy9Ui03vLvqL1JuLmMxgY9R9Ly1C7DsTKT4JpbLr29/Kyb/HQIqefYmoQQwgWZFTMfHPiAN3e/KaM1KpBwcxlNDEF8vz/Vc9owFOdCwbnKp6WsB/mlSbgRQoirSM1PZcrmKfye+jv/vfa/jGo7SkZrHEzCzWU0NQSRX2LidFYh9cI84Njrf3YDv1h5uMmVdTdCCHElP/71IzN+m4Gfjx9Lbl1C59jOapfkkSTcXEZjgx6Ao2l5nhFuys+4CUu49L7ASNB4yaJiIYS4jILSAl78/UW+OPoFveN7M6PrDEL9QtUuy2NJuLmMuqH+BGq9OZKWy43NotUux/6MSZY2C4GRl97n5Q2BUXKQnxBCVOJw5mHGbxpPWkEaz3d7nn9d8y/PWM7gxCTcXIZGo+E
|
|||
|
"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",
|
|||
|
"# pos[\"low\"] = fuzz.zmf(pos.universe, 0, 60)\n",
|
|||
|
"\n",
|
|||
|
"# #от 50 до 80 можно считать средним\n",
|
|||
|
"# pos[\"avg\"] = fuzz.trimf(pos.universe, [50, 70, 80])\n",
|
|||
|
"\n",
|
|||
|
"# #от 75 можно считать высоким\n",
|
|||
|
"# pos[\"high\"] = fuzz.smf(pos.universe, 75, 100)\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"pos.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## База нечётких правил"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 31,
|
|||
|
"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",
|
|||
|
"ref": "b6864b03-4b3a-442d-9c1f-6251995181a1",
|
|||
|
"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]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 31,
|
|||
|
"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",
|
|||
|
"execution_count": 32,
|
|||
|
"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
|
|||
|
}
|