Skip to content
This repository has been archived by the owner on Feb 4, 2022. It is now read-only.
/ regression Public archive

пример построения регрессионного анализа в python

Notifications You must be signed in to change notification settings

Maximilan4/regression

Repository files navigation

Регрессионный анализ

Установка под виртальным окружением (в приоритете):

cd regression # идем в папку с проектом
python3 -m venv venv # создаем виртуальное окружение
source venv/bin/activate # - активируем виртуальное окружение
pip3 -r requirements.txt # устанавливаем зависимости

Установка с глобальной установкой пакетов

cd regression # идем в папку с проектом
pip3 -r requirements.txt # устанавливаем зависимости

Запуск

python3 run.py # - запуск консольного приложения
python3 run.py serve - запуск http сервера

Запуск через Docker (консольное приложение)

docker build -t reg .
docker run -it reg

Запуск через Docker Compose (серверный режим)

docker-compose up

Методы АПИ

Общие положения:

  • на каждый запрос сервер отвечает сообщением с одинаковой структурой:
{
  "data": {},
  "error": false
}
  • data - obj контейнер для возвращаемых данных, в случае ошибки содержит ее описание
  • error - bool флаг наличия ошибки

POST /regression/fit

Метод для обучения модели регрессии. Возвращает итоговый отчет.

Пример json для запроса:

{
  "columns": ["y","x1","x2","x3","x4","x5","x6"], 
  "rows": [
    [3.3,52,1,4,15,2,2.6],
    [3.8,85,4,10,15,2.5,3.1],
    [4.8,124,6,28,8,0.3,0.5],
    [4.6,48,55,110,8,2,1],
    [4,97,6,10,12,1,3.3],
    [3.7,39,26,158,8,0.5,3.7],
    [4.1,104,16,257,8,0,0],
    [4.1,76,18,53,8,0.4,1.5]
  ],
  "relevance_min_value": 0.7,
  "ignore_columns": ["x1","x2"]
}
  • columns - перечисление названий параметров, y и хотя бы один x всегда должны быть указаны
  • rows - матрица с данными, в каждом ряду должно быть столько же значений, сколько было указано названий параметров
  • relevance_min_value - минимальный коэфициент корреляции, при котором параметры будут считаться коллениарными
  • ignore_columns - список параметров, которые необходимо исключить из анализа (параметр может быть пустым массивом [])

Пример ответа сервера:

{
  "data": {
    "adj_r_squared": 0.5155183038651862,
    "correlation": {
      "correlated_params": [
        [
          "x4",
          "x5",
          0.7407192072666815
        ]
      ],
      "relevance_min_value": 0.7,
      "table": {
        "x1": {
          "x1": 1.0,
          "x2": -0.5134551831724647,
          "x3": -0.08001569251893213,
          "x4": -0.08705131541627431,
          "x5": -0.41733439553191765,
          "x6": -0.4756645815169333,
          "y": 0.49135162700875246
        },
        "x2": {
          "x1": -0.5134551831724647,
          "x2": 1.0,
          "x3": 0.4551156176320718,
          "x4": -0.5929430904528824,
          "x5": 0.05493603038103341,
          "x6": -0.24898065005643094,
          "y": 0.42456358225704105
        },
        "x3": {
          "x1": -0.08001569251893213,
          "x2": 0.4551156176320718,
          "x3": 1.0,
          "x4": -0.6234237037556432,
          "x5": -0.5222478991650603,
          "x6": -0.4228884579253137,
          "y": 0.1171648657174811
        },
        "x4": {
          "x1": -0.08705131541627431,
          "x2": -0.5929430904528824,
          "x3": -0.6234237037556432,
          "x4": 1.0,
          "x5": 0.7407192072666815,
          "x6": 0.5614080755953589,
          "y": -0.659828879073858
        },
        "x5": {
          "x1": -0.41733439553191765,
          "x2": 0.05493603038103341,
          "x3": -0.5222478991650603,
          "x4": 0.7407192072666815,
          "x5": 1.0,
          "x6": 0.4077474828832173,
          "y": -0.31486645119259465
        },
        "x6": {
          "x1": -0.4756645815169333,
          "x2": -0.24898065005643094,
          "x3": -0.4228884579253137,
          "x4": 0.5614080755953589,
          "x5": 0.4077474828832173,
          "x6": 1.0,
          "y": -0.6775863445005003
        },
        "y": {
          "x1": 0.49135162700875246,
          "x2": 0.42456358225704105,
          "x3": 0.1171648657174811,
          "x4": -0.659828879073858,
          "x5": -0.31486645119259465,
          "x6": -0.6775863445005003,
          "y": 1.0
        }
      }
    },
    "deviation": 0.17190065554110073,
    "f-stat-values": {
      "f-crit": 9.117182253246417,
      "f-significance": 0.20706507599809795,
      "f-stat": 2.8621075655932273,
      "is_zero_hypothesis": true
    },
    "p-significance": [
      "x3",
      "x4",
      "x6"
    ],
    "predicted_y": [
      3.63287384273946,
      3.6087215296823274,
      4.625468048109845,
      4.582679276728009,
      3.752208098261873,
      3.7534991239443922,
      4.043320425053542,
      4.401229655480551
    ],
    "r_squared": 0.7923649873707941,
    "result-table": {
      "estimates": {
        "x3": -0.002713,
        "x4": -0.137445,
        "x5": 0.156294,
        "x6": -0.172042,
        "y-zero": 5.840128
      },
      "p-values": {
        "x3": 0.004055730042756611,
        "x4": 3.846058838652411e-05,
        "x5": 0.23035604156153489,
        "x6": 0.035936281107707524,
        "y-zero": 1.494637140497801e-06
      },
      "std-error": {
        "x3": 0.0006465735740502291,
        "x4": 0.015030743068879557,
        "x5": 0.1189704217894174,
        "x6": 0.06642146828826596,
        "y-zero": 0.39288663570628146
      },
      "t-values": {
        "x3": -4.195989396599984,
        "x4": -9.144280246238534,
        "x5": 1.3137211213083997,
        "x6": -2.590162429913441,
        "y-zero": 14.864664730166313
      }
    },
    "t-significance": []
  },
  "error": false
}
  • adj_r_squared - скорректированный R^2
  • correlation - данные анализа корреляции, включает коррелирующие параметры и таблицу корреляции
  • deviation - среднее квадратичное отклонение
  • f-stat-values - значения f теста, в частности общее значения уровня значимости уровнения, фактические и критические значения f, а так же флаг подтверждения нулевой гипотезы
  • p-significance - перечисление значимых параметров по p < 0.05
  • predicted_y - предсказанные значения y от прогона на тестовых данных
  • r_squared - R^2
  • result-table - таблица результатов анализа, с найденными коэфициентами уравнения, ошибками, p и t значениями
  • t-significance - перечисление значимых параметров по t > 2

GET /regression/model/params

Возвращает перечисление параметров для последней обученной модели

{
  "data": {
    "params": [
      "x3",
      "x4",
      "x5",
      "x6"
    ]
  },
  "error": false
}

POST /regression/predict

Вычисляет предполагаемое значение на основе переданных параметров и последней обученной модели

{ "x3": 1, "x4": 2, "x5": 3, "x6": 4}

Ответ:

{
  "data": {
    "prediction": 5.343236747961308
  },
  "error": false
}

Основные шаги консольного приложения

  • приложение предложит выбрать файл. По умолчанию нужный файл уже есть в директории sources, но можно добавить свои. Это должен быть *.csv файл, с ; в роли разделителя. Заголовок с параметрами обязателен. См sources/example.csv
  • содержимое файла выведется на экран (TODO: ограничение для больших файлов)
  • программа предложит выбрать коэфициент корреляции, необходимо для определения связанных параметров и не более
  • программа выведет матрицу корреляции, с связанными параметрами (если есть)
  • программа предложит исключить один или несколько параметров, перечислять через запятую, или не вводить ничего, нажав enter
  • начнется генерация отчета в выводе
  • после отчета программа предложит вбить значения x для прогноза

Разбор значений отчета

  • Предполагаемый y - просто вывод предполагаемых y, в текущем алгоритме мы не делим исходную выборку на тестовую и обучачающую, т.к имеем слишком маленькое число значений.
  • Residuals - различные значений возможных ошибок модели
  • Coefficients - таблица коэфициентов x

Затронутые понятие в блоке Coefficients

  • intercept - базовое значение y, если все x=0
  • estimate - найденное значение коэфициента b (b*x)
  • t value - критерий, основанный на t распределении Стьюдента. Указывает на значимость фактора для модели
  • p value - вероятность нулевой гипотезы
  • R-squared и Adjusted R-squared - обычный и скорректированный коэфициент детерминации
  • F-statistic - оценка значимости модели

Лучше о параметрах написано по ссылке

About

пример построения регрессионного анализа в python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published