рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯрд┐рдХрдЯ рд╕рдорд╛рдзрд╛рди рд╕рдордп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рдХрд╛рд░реНрдп рдЯреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЯрд┐рдХрдЯ рдмрдирд╛рдирд╛, рд╣рдордореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╣рдорд╛рд░реА рдЕрдкреАрд▓ рдкрд░ рдирд┐рд░реНрдгрдп рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд╢рд░реНрддреЛрдВ рдХреЛ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрддреА рд╣реИред
рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╡реНрдпрдХреНрддрд┐ / рдЯреАрдо рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рд╕рдордп рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкреАрд▓ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рдордп рдХреА рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдХрдЯ рдХреЗ рддрд╣рдд, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯреАрдо рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдордПрд▓ рдореЙрдбрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ред


рдореИрдВ рд╕реНрд╡рдпрдВ LAB рдирд╛рдордХ рдЯреАрдо рдореЗрдВ SRE рдкрдж рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдБред рд╣рдореЗрдВ рдирдП рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреА рддреИрдирд╛рддреА, рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЕрдкрдбреЗрдЯ, рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛрдиреЛрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдХреНрдпреВрдП рд╕реЗ рдХреЙрд▓ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╡рд┐рд╖рдо рд╣реИрдВ рдФрд░, рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░рд╛рд╢рд┐ рд▓реЗрддреЗ рд╣реИрдВред рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЯреАрдо рд╣реИ рдФрд░ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрдзрд╛рд░ рдЬрдорд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдЖрдзрд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреА рдорджрдж рд╕реЗ, рдПрдХ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬреЛ рдПрдХ рдЕрдкреАрд▓ (рдЯрд┐рдХрдЯ) рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдкрди рд╕рдордп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред


рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ, рд╣рдо JIRA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЬреЛ рдореЙрдбрд▓ рдореИрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕рдХрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрддреНрдкрд╛рдж рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред


рддреЛ, рдЪрд▓рд┐рдП рд╢рдмреНрджреЛрдВ рд╕реЗ рдХрд░реНрдореЛрдВ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рд╣рдо рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
import warnings warnings.simplefilter('ignore') %matplotlib inline import matplotlib.pyplot as plt import pandas as pd import numpy as np import datetime from nltk.corpus import stopwords from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error from sklearn.neighbors import KNeighborsRegressor from sklearn.linear_model import LinearRegression from datetime import time, date for package in [pd, np, matplotlib, sklearn, nltk]: print(package.__name__, 'version:', package.__version__) 

 pandas version: 0.23.4 numpy version: 1.15.0 matplotlib version: 2.2.2 sklearn version: 0.19.2 nltk version: 3.3 

рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ 1.5 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдмрдВрдж рдЯрд┐рдХрдЯреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдФрд░ рдЕрд╡рдзрд┐ рдХреЛ рд╡рд░реНрдгрди рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд╛рда рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ 10783 рдЯрд┐рдХрдЯ рдЗрд╕рдореЗрдВ рдорд┐рд▓реЗред


рдХреНрд╖реЗрддреНрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛
рдмрдирд╛рдпрд╛ рдЧрдпрд╛рдЯрд┐рдХрдЯ рдирд┐рд░реНрдорд╛рдг рдХреА рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп
рд╣рд▓рдЯрд┐рдХрдЯ рдХреА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдФрд░ рд╕рдордп
Resolution_timeрдЯрд┐рдХрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдХрдИ рдорд┐рдирдЯ рдмреАрдд рдЧрдПред рдЗрд╕реЗ рдХреИрд▓реЗрдВрдбрд░ рдХрд╛ рд╕рдордп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрдиреА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рд╕рдордп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкреВрд░реЗ рд╡рд┐рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдирд╣реАрдВ рд╣реИред
Engineer_NрдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ "рдХреЛрдбреЗрдб" рдирд╛рдо (рддрд╛рдХрд┐ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдпрд╛ рдЧреЛрдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рди рджреЗ, рд▓реЗрдЦ рдореЗрдВ "рдПрдиреНрдХреЛрдбреЗрдб" рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реЛрдЧрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрди рдлрд╝реАрд▓реНрдбреЛрдВ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рджрд┐рдирд╛рдВрдХ рд╕реЗрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдХрдЯ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рдордп "рдкреНрд░рдЧрддрд┐ рдореЗрдВ" рдореЛрдб рдореЗрдВ рдЯрд┐рдХрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд░рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред
рд╕рдВрдкрддреНрддрд┐-рднрд╛рдЧреАрдЬреЛ рдХрд░реНрдордЪрд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдерд╛ред
ISSUE_TYPEрдЯрд┐рдХрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ред
рд╡рд╛рддрд╛рд╡рд░рдгрдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯрд┐рдХрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╛ рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдпрд╛ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреЗрдЯрд╛ рдХреЗрдВрджреНрд░)ред
рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдЯрд┐рдХрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ред
WorktypeрдЗрд╕ рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛рд░реНрдп рдХрд╛ рдкреНрд░рдХрд╛рд░ (рд╕рд░реНрд╡рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рд╣рдЯрд╛рдирд╛, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛, рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдЖрджрд┐)
рд╡рд┐рд╡рд░рдгрд╡рд┐рд╡рд░рдг
рд╕рд╛рд░рд╛рдВрд╢рдЯрд┐рдХрдЯ рдХрд╛ рд╢реАрд░реНрд╖рдХред
рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВрдЯрд┐рдХрдЯ рдХреЛ "рджреЗрдЦрдиреЗ" рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЕрд░реНрдерд╛рддреНред рд╡реЗ рдЯрд┐рдХрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╡реЛрдЯрдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП "рд╡реЛрдЯ" рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХрд╛ рдорд╣рддреНрд╡ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрдирдХреА рд░реБрдЪрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред
рд░рд┐рдкреЛрд░реНрдЯрд░рд╡рд╣ рд╡реНрдпрдХреНрддрд┐ рдЬрд┐рд╕рдиреЗ рдЯрд┐рдХрдЯ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдерд╛ред
Engineer_N_vacationрдЯрд┐рдХрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдЗрдВрдЬреАрдирд┐рдпрд░ рдЫреБрдЯреНрдЯреА рдкрд░ рдерд╛ рдпрд╛ рдирд╣реАрдВред

 df.info() 

 <class 'pandas.core.frame.DataFrame'> Index: 10783 entries, ENV-36273 to ENV-49164 Data columns (total 37 columns): Created 10783 non-null object Resolved 10783 non-null object Resolution_time 10783 non-null int64 engineer_1 10783 non-null int64 engineer_2 10783 non-null int64 engineer_3 10783 non-null int64 engineer_4 10783 non-null int64 engineer_5 10783 non-null int64 engineer_6 10783 non-null int64 engineer_7 10783 non-null int64 engineer_8 10783 non-null int64 engineer_9 10783 non-null int64 engineer_10 10783 non-null int64 engineer_11 10783 non-null int64 engineer_12 10783 non-null int64 Assignee 10783 non-null object Issue_type 10783 non-null object Environment 10771 non-null object Priority 10783 non-null object Worktype 7273 non-null object Description 10263 non-null object Summary 10783 non-null object Watchers 10783 non-null int64 Votes 10783 non-null int64 Reporter 10783 non-null object engineer_1_vacation 10783 non-null int64 engineer_2_vacation 10783 non-null int64 engineer_3_vacation 10783 non-null int64 engineer_4_vacation 10783 non-null int64 engineer_5_vacation 10783 non-null int64 engineer_6_vacation 10783 non-null int64 engineer_7_vacation 10783 non-null int64 engineer_8_vacation 10783 non-null int64 engineer_9_vacation 10783 non-null int64 engineer_10_vacation 10783 non-null int64 engineer_11_vacation 10783 non-null int64 engineer_12_vacation 10783 non-null int64 dtypes: float64(12), int64(15), object(10) memory usage: 3.1+ MB 

рдХреБрд▓ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 10 "рдСрдмреНрдЬреЗрдХреНрдЯ" рдлрд╝реАрд▓реНрдб рд╣реИрдВ (рдЬреЛ рдХрд┐ рдкрд╛рда рдорд╛рди рдпреБрдХреНрдд рд╣реИ) рдФрд░ 27 рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдлрд╝реАрд▓реНрдб рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддреБрд░рдВрдд рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрди рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕реЗ рдЯрд┐рдХрдЯ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдордп рд▓рд╛рдЦреЛрдВ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░реЗрдВрдЧреЗред рд╡реЗ рдпрд╣рд╛рдВ рдорд┐рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ JIRA рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣рд▓ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдПрдХ рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддрджрдиреБрд╕рд╛рд░, рдкрд┐рдЫрд▓реЗ 1.5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдмрдВрдж рдХрд┐рдП рдЧрдП рдЯрд┐рдХрдЯ рдпрд╣рд╛рдВ рдорд┐рд▓ рдЧрдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдЗрдирд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЙрди рдЯрд┐рдХрдЯреЛрдВ рдХреЛ рддреНрдпрд╛рдЧ рджреЗрдВрдЧреЗ рдЬреЛ 1 рдЬреВрди 2017 рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдереЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 9493 рдЯрд┐рдХрдЯ рдмрдЪреЗ рд╣реЛрдВрдЧреЗред


рдХрд╛рд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдШреВрдо рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ "рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╝рд╛рдиреВрди рдХреА рд╕рдорд╛рдкреНрддрд┐" рджреНрд╡рд╛рд░рд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕реНрд░реЛрдд рдХреЛрдб
 df[['Created', 'Resolved', 'Resolution_time']].sort_values('Resolution_time', ascending=False).head() 


рд╕реНрд░реЛрдд рдХреЛрдб
 df = df[df['Created'] >= '2017-06-01 00:00:00'] print(df.shape) 

 (9493, 33) 

рддреЛ, рдЖрдЗрдП рд╣рдо рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ - рд╣рдорд╛рд░реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд╛рддрд╛рд╡рд░рдг, рд╕рдмрд╕реЗ рд╕рдХреНрд░рд┐рдп "рд░рд┐рдкреЛрд░реНрдЯрд░" рдФрд░ рдЬреИрд╕реЗред


рд╕реНрд░реЛрдд рдХреЛрдб
 df.describe(include=['object']) 


рд╕реНрд░реЛрдд рдХреЛрдб
 df['Environment'].value_counts().head(10) 

 Environment_104 442 ALL 368 Location02 367 Environment_99 342 Location03 342 Environment_31 322 Environment_14 254 Environment_1 232 Environment_87 227 Location01 202 Name: Environment, dtype: int64 

рд╕реНрд░реЛрдд рдХреЛрдб
 df['Reporter'].value_counts().head() 

 Reporter_16 388 Reporter_97 199 Reporter_04 147 Reporter_110 145 Reporter_133 138 Name: Reporter, dtype: int64 

рд╕реНрд░реЛрдд рдХреЛрдб
 df['Worktype'].value_counts() 

 Support 2482 Infrastructure 1655 Update environment 1138 Monitoring 388 QA 300 Numbers 110 Create environment 95 Tools 62 Delete environment 24 Name: Worktype, dtype: int64 

рд╕реНрд░реЛрдд рдХреЛрдб
 df['Priority'].value_counts().plot(kind='bar', figsize=(12,7), rot=0, fontsize=14, title='   '); 


рдЦреИрд░, рдХреБрдЫ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╕реАрдЦ рдЪреБрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рдХрдо рдЕрдХреНрд╕рд░ рдЙрдЪреНрдЪ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдгред рдмрд╣реБрдд рдХрдо рд╣реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдбрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрддрд╛рд░ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд▓рдЯрдХрд╛ рд░рд╣реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдордп рджреЗрд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдРрд╕реА рдЖрд╢рдВрдХрд╛рдПрдВ рдирд┐рд░рд╛рдзрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рддреНрд╡рд░рдг рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдирд╣реАрдВред


рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рд╕рдмрд╕реЗ рд╕рдХреНрд░рд┐рдп рд╕рдВрд╡рд╛рджрджрд╛рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдо рд╕реЗ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯрд░_16 рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдорд╛рд░реНрдЬрд┐рди рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг_104 рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЖрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрднреА рддрдХ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдЧреБрдкреНрдд рдмрддрд╛рдКрдВрдЧрд╛ - рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЯреАрдо рд╕реЗ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯрд┐рдХрдЯ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдЖрддреЗ рд╣реИрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
 df[df['Priority'] == 'Critical']['Environment'].value_counts().index[0] 

 'Environment_91' 

рдЕрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рд╣реА "рдорд╣рддреНрд╡рдкреВрд░реНрдг" рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
 df[df['Environment'] == df[df['Priority'] == 'Critical']['Environment'].value_counts().index[0]]['Priority'].value_counts() 

 High 62 Critical 57 Normal 46 Name: Priority, dtype: int64 

рдЖрдЗрдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЯрд┐рдХрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рджреЗрдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬреЗрджрд╛рд░ рд╣реИ рдХрд┐ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реЗ рдЯрд┐рдХрдЯ рдХрд╛ рдФрд╕рдд рд░рди рд╕рдордп 70 рд╣рдЬрд╛рд░ рдорд┐рдирдЯ (рд▓рдЧрднрдЧ 1.5 рдорд╣реАрдиреЗ) рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкрд░ рдЯрд┐рдХрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╕реНрд░реЛрдд рдХреЛрдб
 df.groupby(['Priority'])['Resolution_time'].describe() 


рдпрд╛ рдпрд╣рд╛рдБ рдПрдХ рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд╕рдд рдореВрд▓реНрдпред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд┐рддреНрд░ рдмрд╣реБрдд рдмрджрд▓ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЙрддреНрд╕рд░реНрдЬрди рд╡рд┐рддрд░рдг рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рд╕реНрд░реЛрдд рдХреЛрдб
 df.groupby(['Priority'])['Resolution_time'].median().sort_values().plot(kind='bar', figsize=(12,7), rot=0, fontsize=14); 


рдЕрдм рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рдФрд╕рдд рдЯрд┐рдХрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рдордп рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреЗ рдЯрд┐рдХрдЯ рдереЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреЗ рд░реЗрдЦрд╛рдВрдХрди, рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдПрдХ рднреА рддрд╕реНрд╡реАрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рдХрд╛рд░реНрдп рдХреЗ рд╡рд░реНрддрдорд╛рди рдЯрд┐рдХрдЯреЛрдВ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдврд╝рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрдмрдВрдз рд╡рд┐рдкрд░реАрдд рд╣реИред рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рд▓рдд рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлрд┐рд░ рд╕реЗ рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдореЙрдбрд▓ рдХреА рд╕рдЯреАрдХрддрд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдкрд░ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл рдЙрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдореЙрдбрд▓ рджреЗрдЦрддрд╛ рд╣реИред


рд╕реНрд░реЛрдд рдХреЛрдб
 engineers = [i.replace('_vacation', '') for i in df.columns if 'vacation' in i] cols = 2 rows = int(len(engineers) / cols) fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(16,24)) for i in range(rows): for j in range(cols): df.groupby(engineers[i * cols + j])['Resolution_time'].mean().plot(kind='bar', rot=0, ax=axes[i, j]).set_xlabel('Engineer_' + str(i * cols + j + 1)) del cols, rows, fig, axes 

рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреА рддрд╕реНрд╡реАрд░

рдЪрд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЬреЛрдбрд╝реАрджрд╛рд░ рдЕрдВрдд: рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ: рдЯрд┐рдХрдЯ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдордп, рд╡реЛрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдПрдХ рд╡рд┐рдХрд░реНрдг рдмреЛрдирд╕ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рддрд░рдг рд╣реИред


рджрд┐рд▓рдЪрд╕реНрдк рд╕реЗ, рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЯрд┐рдХрдЯ рд╕рдорд╛рдзрд╛рди рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рднреА рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╡реЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
 pd.scatter_matrix(df[['Resolution_time', 'Watchers', 'Votes']], figsize=(15, 15), diagonal='hist'); 

рдкрд░рд┐рдгрд╛рдо рддрд╕реНрд╡реАрд░

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛, рд▓рдХреНрд╖реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмреАрдЪ рдореМрдЬреВрджрд╛ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рджреЗрдЦреАрдВ, рдЬреЛ рдЯрд┐рдХрдЯ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рд╣реИ, рдФрд░ рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЗрд╕рдХреЗ рдкреАрдЫреЗ "рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ" рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реЗ рд╕рдВрдХреЗрдд рд╣реИрдВред рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред


рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рднрд╡рди рдХрд╛ рдЪрд┐рдиреНрд╣


рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдПрдХ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╛рдиреА рд╡рд┐рд░рд▓ рд╡реИрдХреНрдЯрд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рд╕рдордп рдЯрд┐рдХрдЯ рдХреЛ рдореЙрдбрд▓ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдлрд╝реАрд▓реНрдб, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЯрд┐рдХрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ ("рд╣рддреНрдпрд╛")ред


рд▓рдХреНрд╖реНрдп рд╕рдВрдХреЗрдд, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рднреА рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЦрд╛рд▓реА рдереЗ рдХрд┐ рдЯрд┐рдХрдЯ рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп рд░рд┐рдкреЛрд░реНрдЯрд░ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╡рд░рдг рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рднрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╛рдВрдбрд╛ рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ NaN рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
 y = df['Resolution_time'] df.drop(['Created', 'Resolved', 'Resolution_time', 'Assignee'], axis=1, inplace=True) df['Description'].fillna('', inplace=True) df['Summary'].fillna('', inplace=True) 

рд╣рдо рд╡рд┐рд░рд▓ рд╡реИрдХреНрдЯрд░ ( рдПрдХ-рдЧрд░реНрдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ ) рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рд╣рдо рдЯрд┐рдХрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрддреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрддреЗ рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рд░рд┐рдкреЛрд░реНрдЯрд░ рдирд╛рдореЛрдВ рдореЗрдВ рдПрдХ [X] рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП JIRA рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдм рдХрдВрдкрдиреА рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдмреАрдЪ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЗрди рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдЯрд┐рдХрдЯ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред


рд╕реНрд░реЛрдд рдХреЛрдб
 def create_df(dic, feature_list): out = pd.DataFrame(dic) out = pd.concat([out, pd.get_dummies(out[feature_list])], axis = 1) out.drop(feature_list, axis = 1, inplace = True) return out X = create_df(df, df.columns[df.dtypes == 'object'].drop(['Description', 'Summary'])) X.columns = X.columns.str.replace(' \[X\]', '') 

рдФрд░ рдЕрдм рд╣рдо рдЯрд┐рдХрдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рд╣рдо рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ - рд╣рдо рдЕрдкрдиреЗ рдЯрд┐рдХрдЯреЛрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд╕рднреА рд╢рдмреНрджреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗ, рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ, "рдЕрддрд┐рд░рд┐рдХреНрдд" рд╢рдмреНрджреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ - рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж "рдХреГрдкрдпрд╛" (рдХреГрдкрдпрд╛ - JIRA рдореЗрдВ рд╕рднреА рд╕рдВрдЪрд╛рд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ), рдЬреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред рд╣рд╛рдБ, рдпреЗ рд╣рдорд╛рд░реЗ рд╡рд┐рдирдореНрд░ рд▓реЛрдЧ рд╣реИрдВред


рд╣рдо nltk рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдиреБрд╕рд╛рд░, " рд╢рдмреНрджреЛрдВ рдХреЛ рд░реЛрдХреЗрдВ " рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд░реНрдгреЛрдВ рдХреЗ рдкрд╛рда рдХреЛ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рдо рд╣реИ рдЬреЛ рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо " рд╕реНрдЯреИрдореНрдк " рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрди-рдЧреНрд░рд╛рдо рд╢рдмреНрджреЛрдВ рдХреЛ рднреА рдЧрд┐рди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЦреБрдж рдХреЛ рдЙрд╕реА рддрдХ рд╕реАрдорд┐рдд рд░рдЦреЗрдВрдЧреЗред


рд╕реНрд░реЛрдд рдХреЛрдб
 all_words = np.concatenate(df['Description'].apply(lambda s: s.split()).values) stop_words = stopwords.words('english') stop_words.extend(['please', 'hi', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '(', ')', '=', '{', '}']) stop_words.extend(['h3', '+', '-', '@', '!', '#', '$', '%', '^', '&', '*', '(for', 'output)']) stop_symbols = ['=>', '|', '[', ']', '#', '*', '\\', '/', '->', '>', '<', '&'] words_series = pd.Series(list(all_words)) del all_words words_series = words_series[~words_series.isin(stop_words)] for symbol in stop_symbols: words_series = words_series[~words_series.str.contains(symbol, regex=False, na=False)] 

рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрдВрдбреЛрдВ рдХрд╛ рдирд╛рдо рдорд┐рд▓рд╛ рд╣реИред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рд╕реЗ рдкрд╣рд▓реЗ 50 рд▓реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдо рдореЗрдВ 1 рдбрд╛рд▓ рджреЗрдВ, рдЕрдиреНрдпрдерд╛ 0ред


рд╕реНрд░реЛрдд рдХреЛрдб
 usefull_words = list(words_series.value_counts().head(50).index) print(usefull_words[0:10]) 

 ['error', 'account', 'info', 'call', '{code}', 'behavior', 'array', 'update', 'env', 'actual'] 

рдЕрдм рд╣рдорд╛рд░реЗ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рд╣рдо рдЙрди рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХреЙрд▓рдо рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЪреБрдирд╛ рд╣реИред рдЗрд╕ рдкрд░, рдЖрдк рд╡рд░реНрдгрди рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЦреБрдж рдХреЛ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
 for word in usefull_words: X['Description_' + word] = X['Description'].str.contains(word).astype('int64') X.drop('Description', axis=1, inplace=True) 

рд╣рдо рдЯрд┐рдХрдЯ рдЯрд╛рдЗрдЯрд▓ рдлреАрд▓реНрдб рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗред


рд╕реНрд░реЛрдд рдХреЛрдб
 all_words = np.concatenate(df['Summary'].apply(lambda s: s.split()).values) words_series = pd.Series(list(all_words)) del all_words words_series = words_series[~words_series.isin(stop_words)] for symbol in stop_symbols: words_series = words_series[~words_series.str.contains(symbol, regex=False, na=False)] usefull_words = list(words_series.value_counts().head(50).index) for word in usefull_words: X['Summary_' + word] = X['Summary'].str.contains(word).astype('int64') X.drop('Summary', axis=1, inplace=True) 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдлреАрдЪрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХреНрд╕ рдФрд░ рд░рд┐рд╕реНрдкрд╛рдВрд╕ рд╡реЗрдХреНрдЯрд░ рд╡рд╛рдИ рдореЗрдВ рдХреНрдпрд╛ рдЦрддреНрдо рдХрд┐рдпрд╛ред


рд╕реНрд░реЛрдд рдХреЛрдб
 print(X.shape, y.shape) 

 ((9493, 1114), (9493,)) 

рдЕрдм рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг (рдЯреНрд░реЗрдирд┐рдВрдЧ) рдирдореВрдиреЗ рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдореЗрдВ 75/25 рдкреНрд░рддрд┐рд╢рдд рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 7119 рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬрд┐рди рдкрд░ рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдВрдЧреЗ, рдФрд░ 2374, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓реЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рдорд╛рд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЖрдпрд╛рдо рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдмрд┐рдЫрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрдврд╝рдХрд░ 1114 рд╣реЛ рдЧрдпрд╛ред


рд╕реНрд░реЛрдд рдХреЛрдб
 X_train, X_holdout, y_train, y_holdout = train_test_split(X, y, test_size=0.25, random_state=17) print(X_train.shape, X_holdout.shape) 

 ((7119, 1114), (2374, 1114)) 

рд╣рдо рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдорди


рдЖрдЗрдП рд╕рдмрд╕реЗ рд╣рд▓реНрдХреЗ рдФрд░ (рдЕрдкреЗрдХреНрд╖рд┐рдд) рдХрдо рд╕реЗ рдХрдо рд╕рдЯреАрдХ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ - рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдордиред рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдкрд░ рд╕рдЯреАрдХрддрд╛ рдФрд░ рджреЗрд░реА рд╕реЗ (рд╣реЛрд▓реНрдбрдЖрдЙрдЯ) рдирдореВрдирд╛ - рдбреЗрдЯрд╛ рдЬреЛ рдореЙрдбрд▓ рдиреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛, рджреЛрдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗред


рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбрд▓ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдкрд░ рдЦреБрдж рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд▓рдВрдмрд┐рдд рдирдореВрдиреЗ рдкрд░ рд╕рдЯреАрдХрддрд╛ рд░рд╛рдХреНрд╖рд╕реА рд░реВрдк рд╕реЗ рдХрдо рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рднреА рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдФрд╕рдд рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рд╕реЗ рднреА рдмрджрддрд░ред


рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯрд╛ рдмреНрд░реЗрдХ рд▓реЗрдиреЗ рдФрд░ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдЕрдкрдиреА рд╕реНрдХреЛрд░ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред
рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рдЧреБрдгрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


R2=1тИТ sumi=1m(yiтИТ haty)2 over sumi=1m(yi)тИТ overliney)2


рдЬрд╣рд╛рдБ  yрдкрд░рд┐рдгрд╛рдо рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╣реИ рдПрдХ  overliney- рдкреВрд░реЗ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдореВрд▓реНрдпред


рд╣рдо рдЕрдм рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧреБрдгрд╛рдВрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрд╕ рдореЙрдбрд▓ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрд╕реА рд╕рдордп, рд╣рдо рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореАрди рдПрдмреНрд╕реЛрд▓реНрдпреВрдЯ рдПрд░рд░ (рдПрдордПрдИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


рд╕реНрд░реЛрдд рдХреЛрдб
 lr = LinearRegression() lr.fit(X_train, y_train) print('R^2 train:', lr.score(X_train, y_train)) print('R^2 test:', lr.score(X_holdout, y_holdout)) print('MAE train', mean_absolute_error(lr.predict(X_train), y_train)) print('MAE test', mean_absolute_error(lr.predict(X_holdout), y_holdout)) 

 R^2 train: 0.3884389470220214 R^2 test: -6.652435243123196e+17 MAE train: 8503.67256637168 MAE test: 1710257520060.8154 

рдзреАрд░реЗ-рдзреАрд░реЗ рдмреВрд╕реНрдЯ


рдареАрдХ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛? рдЖрдЗрдП рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЦреНрдпрд╛рдд XGBoost рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдорд╛рдирдХ рд╣рд╛рдЗрдкрд░рдкрд░рдореАрдЯрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред


рд╕реНрд░реЛрдд рдХреЛрдб
 import xgboost xgb = xgboost.XGBRegressor() xgb.fit(X_train, y_train) print('R^2 train:', xgb.score(X_train, y_train)) print('R^2 test:', xgb.score(X_holdout, y_holdout)) print('MAE train', mean_absolute_error(xgb.predict(X_train), y_train)) print('MAE test', mean_absolute_error(xgb.predict(X_holdout), y_holdout)) 

 R^2 train: 0.5138516547636054 R^2 test: 0.12965507684512545 MAE train: 7108.165167471887 MAE test: 8343.433260957032 

рдЖрдЙрдЯ рдСрдл рдж рдмреЙрдХреНрд╕ рдЕрдм рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рд╣рд╛рдЗрдкрд░рдкрд░рдореЗрдЯрд░реНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдореЙрдбрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: n_estimators, learning_rate рдФрд░ max_depthред рдирддреАрдЬрддрди, рд╣рдо рдХреНрд░рдорд╢рдГ 150, 0.1 рдФрд░ 3 рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдкрд░ рдореЙрдбрд▓ рдХреЗ рдУрд╡рд░рдЯреНрд░реЗрдирд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред


рд╣рдо n_estimators рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ

* рдЪрд┐рддреНрд░ рдореЗрдВ R ^ 2 рд╕реНрдХреЛрд░ рдХреЗ рдмрдЬрд╛рдп MAE рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


 xgb_model_abs_testing = list() xgb_model_abs_training = list() rng = np.arange(1,151) for i in rng: xgb = xgboost.XGBRegressor(n_estimators=i) xgb.fit(X_train, y_train) xgb.score(X_holdout, y_holdout) xgb_model_abs_testing.append(mean_absolute_error(xgb.predict(X_holdout), y_holdout)) xgb_model_abs_training.append(mean_absolute_error(xgb.predict(X_train), y_train)) plt.figure(figsize=(14, 8)) plt.plot(rng, xgb_model_abs_testing, label='MAE test'); plt.plot(rng, xgb_model_abs_training, label='MAE train'); plt.xlabel('Number of estimators') plt.ylabel('$R^2 Score$') plt.legend(loc='best') plt.show(); 


рд╣рдо learning_rate рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ
 xgb_model_abs_testing = list() xgb_model_abs_training = list() rng = np.arange(0.05, 0.65, 0.05) for i in rng: xgb = xgboost.XGBRegressor(n_estimators=150, random_state=17, learning_rate=i) xgb.fit(X_train, y_train) xgb.score(X_holdout, y_holdout) xgb_model_abs_testing.append(mean_absolute_error(xgb.predict(X_holdout), y_holdout)) xgb_model_abs_training.append(mean_absolute_error(xgb.predict(X_train), y_train)) plt.figure(figsize=(14, 8)) plt.plot(rng, xgb_model_abs_testing, label='MAE test'); plt.plot(rng, xgb_model_abs_training, label='MAE train'); plt.xlabel('Learning rate') plt.ylabel('MAE') plt.legend(loc='best') plt.show(); 


рд╣рдо max_depth рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ
 xgb_model_abs_testing = list() xgb_model_abs_training = list() rng = np.arange(1, 11) for i in rng: xgb = xgboost.XGBRegressor(n_estimators=150, random_state=17, learning_rate=0.1, max_depth=i) xgb.fit(X_train, y_train) xgb.score(X_holdout, y_holdout) xgb_model_abs_testing.append(mean_absolute_error(xgb.predict(X_holdout), y_holdout)) xgb_model_abs_training.append(mean_absolute_error(xgb.predict(X_train), y_train)) plt.figure(figsize=(14, 8)) plt.plot(rng, xgb_model_abs_testing, label='MAE test'); plt.plot(rng, xgb_model_abs_training, label='MAE train'); plt.xlabel('Maximum depth') plt.ylabel('MAE') plt.legend(loc='best') plt.show(); 


рдЕрдм рд╣рдо рдЪрдпрдирд┐рдд рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред


рд╕реНрд░реЛрдд рдХреЛрдб
 xgb = xgboost.XGBRegressor(n_estimators=150, random_state=17, learning_rate=0.1, max_depth=3) xgb.fit(X_train, y_train) print('R^2 train:', xgb.score(X_train, y_train)) print('R^2 test:', xgb.score(X_holdout, y_holdout)) print('MAE train', mean_absolute_error(xgb.predict(X_train), y_train)) print('MAE test', mean_absolute_error(xgb.predict(X_holdout), y_holdout)) 

 R^2 train: 0.6745967150462303 R^2 test: 0.15415143189670344 MAE train: 6328.384400466232 MAE test: 8217.07897417256 

рдЪрдпрдирд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо - рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдорд╣рддреНрд╡ред рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЯрд┐рдХрдЯ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ 4 рдЗрдВрдЬреАрдирд┐рдпрд░ рддреБрд░рдВрдд рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд░реЛрдЬрдЧрд╛рд░ рд╕реЗ рдПрдХ рдЯрд┐рдХрдЯ рдХреЗ рд░реЛрдЬрдЧрд╛рд░ рдХрд╛ рд╕рдордп рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЦрд╛рд▓реА рд╕рдордп рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХрдо рд╕реЗ рдХрдо рдХреНрдпреЛрдВрдХрд┐ рдЯреАрдо рдореЗрдВ рд╡рд░рд┐рд╖реНрда рдЗрдВрдЬреАрдирд┐рдпрд░ рдФрд░ рдордзреНрдп (рд╣рдо рдЯреАрдо рдореЗрдВ рдЬреВрдирд┐рдпрд░ рдирд╣реАрдВ рд╣реИрдВ) рджреЛрдиреЛрдВ рд╣реИрдВред рд╡реИрд╕реЗ, рдлрд┐рд░ рд╕реЗ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ, рдкрд╣рд▓реА рдЬрдЧрд╣ (рдирд╛рд░рдВрдЧреА рдкрдЯреНрдЯреА) рдореЗрдВ рдЗрдВрдЬреАрдирд┐рдпрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реА рдЯреАрдо рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЕрдиреБрднрд╡реА рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рд╕рднреА рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдореЗрдВ рд╕реЗ 4 рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рд╡рд░рд┐рд╖реНрда рдЙрдкрд╕рд░реНрдЧ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдиреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИред


рд╕реНрд░реЛрдд рдХреЛрдб
 features_df = pd.DataFrame(data=xgb.feature_importances_.reshape(1, -1), columns=X.columns).sort_values(axis=1, by=[0], ascending=False) features_df.loc[0][0:10].plot(kind='bar', figsize=(16, 8), rot=75, fontsize=14); 


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ


рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдХреНрд░рдорд┐рдХ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗ рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрд▓реЗрдпрд░ рдкрд░рд╕реЗрдкреНрдЯреНрд░реЙрди, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рддрд░рдг рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХред рдЗрд╕ рдмрд╛рд░ рд╣рдо рд╣рд╛рдЗрдкрд░рдкрд░рдореЗрдЯрд░реНрд╕ рдХреА рдорд╛рдирдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдХреЗрд▓реЗрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 100 рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рдд рд╣реИ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдореЙрдбрд▓ рдорд╛рдирдХ 200 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╣рдорддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред рд╣рдо рддреБрд░рдВрдд 300, 200 рдФрд░ 100 рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд╢рдГ 3 рдЫрд┐рдкреА рд╣реБрдИ рдкрд░рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдирддреАрдЬрддрди, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдирдореВрдиреЗ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдкрд░ рдПрдХ рд╕рднреНрдп рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдХрд╛рдлреА рдХрдо рд╣реИред


рд╕реНрд░реЛрдд рдХреЛрдб
 from sklearn.neural_network import MLPRegressor nn = MLPRegressor(random_state=17, hidden_layer_sizes=(300, 200 ,100), alpha=0.03, learning_rate='adaptive', learning_rate_init=0.0005, max_iter=200, momentum=0.9, nesterovs_momentum=True) nn.fit(X_train, y_train) print('R^2 train:', nn.score(X_train, y_train)) print('R^2 test:', nn.score(X_holdout, y_holdout)) print('MAE train', mean_absolute_error(nn.predict(X_train), y_train)) print('MAE test', mean_absolute_error(nn.predict(X_holdout), y_holdout)) 

 R^2 train: 0.9771443840549647 R^2 test: -0.15166596239118246 MAE train: 1627.3212161350423 MAE test: 8816.204561947616 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдХреЗ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред , , 200 , , . .


 plt.figure(figsize=(14, 8)) for i in [(500,), (750,), (1000,), (500,500)]: nn = MLPRegressor(random_state=17, hidden_layer_sizes=i, alpha=0.03, learning_rate='adaptive', learning_rate_init=0.0005, max_iter=200, momentum=0.9, nesterovs_momentum=True) nn.fit(X_train, y_train) plt.plot(nn.loss_curve_, label=str(i)); plt.xlabel('Iterations') plt.ylabel('MSE') plt.legend(loc='best') plt.show() 


. 3 10 .


 plt.figure(figsize=(14, 8)) for i in [(500,300,100), (80, 60, 60, 60, 40, 40, 40, 40, 20, 10), (80, 60, 60, 40, 40, 40, 20, 10), (150, 100, 80, 60, 40, 40, 20, 10), (200, 100, 100, 100, 80, 80, 80, 40, 20), (80, 40, 20, 20, 10, 5), (300, 250, 200, 100, 80, 80, 80, 40, 20)]: nn = MLPRegressor(random_state=17, hidden_layer_sizes=i, alpha=0.03, learning_rate='adaptive', learning_rate_init=0.001, max_iter=200, momentum=0.9, nesterovs_momentum=True) nn.fit(X_train, y_train) plt.plot(nn.loss_curve_, label=str(i)); plt.xlabel('Iterations') plt.ylabel('MSE') plt.legend(loc='best') plt.show() 


"" (200, 100, 100, 100, 80, 80, 80, 40, 20) :
2506
7351


, , . learning rate .


 nn = MLPRegressor(random_state=17, hidden_layer_sizes=(200, 100, 100, 100, 80, 80, 80, 40, 20), alpha=0.1, learning_rate='adaptive', learning_rate_init=0.007, max_iter=200, momentum=0.9, nesterovs_momentum=True) nn.fit(X_train, y_train) print('R^2 train:', nn.score(X_train, y_train)) print('R^2 test:', nn.score(X_holdout, y_holdout)) print('MAE train', mean_absolute_error(nn.predict(X_train), y_train)) print('MAE test', mean_absolute_error(nn.predict(X_holdout), y_holdout)) 

 R^2 train: 0.836204705204337 R^2 test: 0.15858607391959356 MAE train: 4075.8553476632796 MAE test: 7530.502826043687 

, . , . , , .


. : ( , 200 ). , "" . , 30 200 , issue type: Epic . , .. , , , , . 4 5 . , . , .


тАФ 9 , . , , , .


 pd.Series([X_train.columns[abs(nn.coefs_[0][:,i]).argmax()] for i in range(nn.hidden_layer_sizes[0])]).value_counts().head(5).sort_values().plot(kind='barh', title='Feature importance', fontsize=14, figsize=(14,8)); 



. рдХреНрдпреЛрдВ? 7530 8217. (7530 + 8217) / 2 = 7873, , , ? , . , . , 7526.


, kaggle . , , .


 nn_predict = nn.predict(X_holdout) xgb_predict = xgb.predict(X_holdout) print('NN MSE:', mean_squared_error(nn_predict, y_holdout)) print('XGB MSE:', mean_squared_error(xgb_predict, y_holdout)) print('Ensemble:', mean_squared_error((nn_predict + xgb_predict) / 2, y_holdout)) print('NN MAE:', mean_absolute_error(nn_predict, y_holdout)) print('XGB MSE:', mean_absolute_error(xgb_predict, y_holdout)) print('Ensemble:', mean_absolute_error((nn_predict + xgb_predict) / 2, y_holdout)) 

 NN MSE: 628107316.262393 XGB MSE: 631417733.4224195 Ensemble: 593516226.8298339 NN MAE: 7530.502826043687 XGB MSE: 8217.07897417256 Ensemble: 7526.763569558157 


? 7500 . рдпрд╛рдиреА 5 . . . , .


( ):


 ((nn_predict + xgb_predict) / 2 - y_holdout).apply(np.abs).sort_values(ascending=False).head(10).values 

 [469132.30504392, 454064.03521379, 252946.87342439, 251786.22682697, 224012.59016987, 15671.21520735, 13201.12440327, 203548.46460229, 172427.32150665, 171088.75543224] 

. , .


 df.loc[((nn_predict + xgb_predict) / 2 - y_holdout).apply(np.abs).sort_values(ascending=False).head(10).index][['Issue_type', 'Priority', 'Worktype', 'Summary', 'Watchers']] 


, - , . 4 .


, .


 print(((nn_predict + xgb_predict) / 2 - y_holdout).apply(np.abs).sort_values().head(10).values) df.loc[((nn_predict + xgb_predict) / 2 - y_holdout).apply(np.abs).sort_values().head(10).index][['Issue_type', 'Priority', 'Worktype', 'Summary', 'Watchers']] 

 [ 1.24606014, 2.6723969, 4.51969139, 10.04159236, 11.14335444, 14.4951508, 16.51012874, 17.78445744, 21.56106258, 24.78219295] 


, , - , - . , , , .


Engineer


, 'Engineer', , , ? .


, 2 . , , , , . , , , "" , ( ) , , , . , " ", .


, . , , 12 , ( JQL JIRA):


 assignee was engineer_N during (ticket_creation_date) and status was "In Progress" 

10783 * 12 = 129396 , тАж . , , , .. 5 .
, , , , 2 . .



. SLO , .


, , ( : - , - , - ) , .

Source: https://habr.com/ru/post/hi433166/


All Articles