рдкрд░рд┐рдЪрдп
рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рд╡реЗрдм рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдШреВрдорддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕ рд╡рд░реНрд╖ рдХреЗ рд╢реБрд░реВ рдореЗрдВ рдЯреАрд╕реАрдПрд╕ рдмреИрдВрдХ рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдПрдХ
рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЙрди рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдореИрдВрдиреЗ рд╕реНрдХреЛрд░рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ (рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ 3) рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣,
рдкрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде
рдкрдВрдбреЛрдВ рдФрд░
рд╕реНрдХрд┐рдЯрд┐рдЯ-рд▓рд░реНрди рдПрдирд╛рд▓рд┐рдЯрд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдбреЗрдЯрд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд┐рд╡рд░рдг
рдмреИрдВрдХ рддреАрди рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд░реВрд╕реА рдХреНрд░реЗрдбрд┐рдЯ рдмреНрдпреВрд░реЛ рд╕реЗ рдЖрд╡реЗрджрдХ рдХреЗ рдХреНрд░реЗрдбрд┐рдЯ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
SAMPLE_CUSTOMERS.CSV рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреИрдВрдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рдЪрдпрди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИред рдирдореВрдирд╛ "рдЯреНрд░реЗрди" рдФрд░ "рдкрд░реАрдХреНрд╖рдг" рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред "рдЯреНрд░реЗрди" рдирдореВрдиреЗ рд╕реЗ, рдЦрд░рд╛рдм рд▓рдХреНрд╖реНрдп рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдЬреНрдЮрд╛рдд рд╣реИ - рдПрдХ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ (рдЧреНрд░рд╛рд╣рдХ рдЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рд╡рд░реНрд╖ рдХреЗ рджреМрд░рд╛рди 90 рдпрд╛ рдЕрдзрд┐рдХ рджрд┐рдиреЛрдВ рдХреА рджреЗрд░реА рдорд╛рдирддрд╛ рд╣реИ)ред
SAMPLE_ACCOUNTS.CSV рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреНрд░реЗрдбрд┐рдЯ рдмреНрдпреВрд░реЛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
SAMPLE_CUSTOMERS рдбреЗрдЯрд╛
рдкреНрд░рд╛рд░реВрдк - рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред
SAMPLE_ACCOUNTS рдбреЗрдЯрд╛рд╕реЗрдЯ
рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд┐рд╡рд░рдг:
рд╡рд┐рд╡рд░рдг рд╕реЗрдЯ рдХрд░реЗрдВрдирд╛рдо | рд╡рд┐рд╡рд░рдг |
---|
TCS_CUSTOMER_ID | рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА |
BUREAU_CD | рдмреНрдпреВрд░реЛ рдХрд╛ рдХреЛрдб рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЪрд╛рд▓рд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ |
BKI_REQUEST_DATE | рддрд╛рд░реАрдЦ рдЬрд┐рд╕ рдкрд░ рдмреНрдпреВрд░реЛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ |
рдореБрджреНрд░рд╛ | рдЕрдиреБрдмрдВрдз рдореБрджреНрд░рд╛ (рдЖрдИрдПрд╕рдУ рдореБрджреНрд░рд╛ рдкрддреНрд░ рдХреЛрдб) |
рд╕рдВрдмрдВрдз | рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рдВрдмрдВрдз рдХрд╛ рдкреНрд░рдХрд╛рд░ |
| 1 - рд╡реНрдпрдХреНрддрд┐рдЧрдд |
2 - рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдб / рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ |
4 - рд╕рдВрдпреБрдХреНрдд |
5 - рдЧрд╛рд░рдВрдЯрд░ |
9 - рдХрд╛рдиреВрдиреА рдЗрдХрд╛рдИ |
OPEN_DATE | рдЕрдиреБрдмрдВрдз рдЦреЛрд▓рдиреЗ рдХреА рддрд╛рд░реАрдЦ |
FINAL_PMT_DATE | рдЕрдВрддрд┐рдо рднреБрдЧрддрд╛рди рддрд┐рдерд┐ (рдирд┐рдпреЛрдЬрд┐рдд) |
рдкреНрд░рдХрд╛рд░ | рдЕрдиреБрдмрдВрдз рдкреНрд░рдХрд╛рд░ рдХреЛрдб |
| 1 - рдХрд╛рд░ рд▓реЛрди |
4 - рдкрдЯреНрдЯреЗ рдкрд░ рджреЗрдирд╛ |
6 - рдмрдВрдзрдХ |
7 - рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб |
9 - рдЙрдкрднреЛрдХреНрддрд╛ рдЛрдг |
10 - рдмрд┐рдЬрдиреЗрд╕ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреНрд░реЗрдбрд┐рдЯ |
11 - рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреВрдВрдЬреА рдХреА рдкреБрдирдГрдкреВрд░реНрддрд┐ рдХреЗ рд▓рд┐рдП рдЛрдг |
12 - рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдЛрдг |
13 - рдЕрдЪрд▓ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдорд╛рдг рдЛрдг |
14 - рд╢реЗрдпрд░реЛрдВ рдХреА рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбрд┐рдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд░реНрдЬрд┐рди рдЙрдзрд╛рд░) |
99 - рдЕрдиреНрдп |
PMT_STRING_84M | рднреБрдЧрддрд╛рди рдХрд╛ рдЕрдиреБрд╢рд╛рд╕рди (рд╕рдордпрдмрджреНрдзрддрд╛)ред рд▓рд╛рдЗрди рдЙрди рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЦрд╛рддрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдмреИрдВрдХ рдЦрд╛рддреЗ рдХрд╛ рдбреЗрдЯрд╛ рдмреНрдпреВрд░реЛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдЪрд░рд┐рддреНрд░ рддрд╛рд░реАрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╣реИ PMT_STRING_START, рдлрд┐рд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВред
|
| 0 - рдирдпрд╛, рдХреЛрдИ рд░реЗрдЯрд┐рдВрдЧ рд╕рдВрднрд╡ рдирд╣реАрдВ |
рдПрдХреНрд╕ - рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ |
1 - рдмрд┐рдирд╛ рджреЗрд░реА рдХреЗ рднреБрдЧрддрд╛рди |
рдП - 1 рд╕реЗ 29 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА |
2 - 30 рд╕реЗ 59 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА |
3 - 60 рд╕реЗ 89 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА |
4 - 90 рд╕реЗ 119 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА |
5 - 120 рджрд┐рдиреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рджреЗрд░реА |
7 - рдирд┐рдпрдорд┐рдд рд╕рдореЗрдХрд┐рдд рднреБрдЧрддрд╛рди |
8 - рд╕рдВрдкрд╛рд░реНрд╢реНрд╡рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЛрдг рдХреА рдЪреБрдХреМрддреА |
9 - рдЦрд░рд╛рдм рдЛрдг / рд╕рдВрдЧреНрд░рд╣ / рдорд┐рд╕реНрдб рднреБрдЧрддрд╛рди рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд |
рд╕реНрдерд┐рддрд┐ | рдЕрдиреБрдмрдВрдз рдХреА рд╕реНрдерд┐рддрд┐ |
| 00 - рд╕рдХреНрд░рд┐рдп |
12 - рд╕реБрд░рдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ |
13 - рдЦрд╛рддрд╛ рдмрдВрдж |
14 - рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдмреИрдВрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд |
21 - рд╡рд┐рд╡рд╛рдж |
52 - рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд |
61 - рд╡рд╛рдкрд╕реА рдХреЗ рдореБрджреНрджреЗ |
рдмрдХрд╛рдпрд╛ | рдмрдХрд╛рдпрд╛ рдЛрдг рд╢реЗрд╖ рд╣реИред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рд╕реЗрдВрдЯреНрд░рд▓ рдмреИрдВрдХ рдХреА рджрд░ рд╕реЗ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐ |
NEXT_PMT
| рдЕрдЧрд▓реЗ рднреБрдЧрддрд╛рди рдХрд╛ рдЖрдХрд╛рд░ред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рд╕реЗрдВрдЯреНрд░рд▓ рдмреИрдВрдХ рдХреА рджрд░ рд╕реЗ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐ |
INF_CONFIRM_DATE | рдЦрд╛рддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рддрд╛рд░реАрдЦ |
FACT_CLOSE_DATE
| рдЦрд╛рддрд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рддрд╛рд░реАрдЦ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ)
|
TTL_DELQ_5
| 5 рджрд┐рдиреЛрдВ рддрдХ рдХреА рджреЗрд░реА
|
TTL_DELQ_5_29
| 5 рд╕реЗ 29 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛
|
TTL_DELQ_30_59
| 30 рд╕реЗ 59 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛
|
TTL_DELQ_60_89
| 60 рд╕реЗ 89 рджрд┐рдиреЛрдВ рддрдХ рджреЗрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛
|
TTL_DELQ_30
| 30 рджрд┐рдиреЛрдВ рддрдХ рдХреА рджреЗрд░реА
|
TTL_DELQ_90_PLUS
| рджреЗрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ 90+ рджрд┐рди
|
PMT_FREQ
| рднреБрдЧрддрд╛рди рдЖрд╡реГрддреНрддрд┐ рдХреЛрдб
|
| 1 - рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ
|
2 - рд╣рд░ рджреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ рдмрд╛рд░
|
3 - рдорд╛рд╕рд┐рдХ
|
A - рд╣рд░ 2 рдорд╣реАрдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░
|
4 - рддреНрд░реИрдорд╛рд╕рд┐рдХ
|
рдмреА - рд╣рд░ 4 рдорд╣реАрдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░
|
5 - рд╣рд░ рдЫрд╣ рдорд╣реАрдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░
|
6 - рд╡рд╛рд░реНрд╖рд┐рдХ рд░реВрдк рд╕реЗ
|
7 - рдЕрдиреНрдп
|
CREDIT_LIMIT
| рдХреНрд░реЗрдбрд┐рдЯ рд╕реАрдорд╛ред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рд╕реЗрдВрдЯреНрд░рд▓ рдмреИрдВрдХ рдХреА рджрд░ рд╕реЗ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐
|
DELQ_BALANCE
| рд╡рд░реНрддрдорд╛рди рдмрдХрд╛рдпрд╛ред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рд╕реЗрдВрдЯреНрд░рд▓ рдмреИрдВрдХ рдХреА рджрд░ рд╕реЗ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐
|
MAX_DELQ_BALANCE
| рдмрдХрд╛рдпрд╛ рд░рд╛рд╢рд┐ рдХреА рдЕрдзрд┐рдХрддрдо рд░рд╛рд╢рд┐ред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рд╕реЗрдВрдЯреНрд░рд▓ рдмреИрдВрдХ рдХреА рджрд░ рд╕реЗ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐
|
CURRENT_DELQ
| рджрд┐рдиреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдХрд╛рд░рдг
|
PMT_STRING_START
| рд▓рд╛рдЗрди рдкреНрд░рд╛рд░рдВрдн рджрд┐рдирд╛рдВрдХ PMT_STRING_84M
|
INTEREST_RATE
| рдЛрдг рдмреНрдпрд╛рдЬ рджрд░
|
CURR_BALANCE_AMT
| рдореВрд▓ рд░рд╛рд╢рд┐, рдмреНрдпрд╛рдЬ, рдЬреБрд░реНрдорд╛рдирд╛ рдФрд░ рдЬреБрд░реНрдорд╛рдирд╛ рд╕рд╣рд┐рдд рдХреБрд▓ рд░рд╛рд╢рд┐ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рд╕реЗрдВрдЯреНрд░рд▓ рдмреИрдВрдХ рдХреА рджрд░ рд╕реЗ рд░реВрдмрд▓ рдореЗрдВ рд░рд╛рд╢рд┐
|
рдХрд╛рд░реНрдп
"рдЯреНрд░реЗрди" рдирдореВрдиреЗ рдкрд░ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ рдЬреЛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░
"рдкрд░реАрдХреНрд╖рдг" рдирдореВрдиреЗ рд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдиреАрдЪреЗ рд░рдЦрддрд╛ рд╣реИред рдореЙрдбрд▓ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдЖрд░рдУрд╕реА рдХреЗ рддрд╣рдд рд╡рдХреНрд░ рд╡рдХреНрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХрд╛рд░реНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдбреЗрдЯрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦреЗрдВ:
from pandas import read_csv, DataFrame from sklearn.metrics import roc_curve from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.cross_validation import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn.neighbors import KNeighborsClassifier from sklearn.decomposition import PCA import ml_metrics, string, re, pylab as pl SampleCustomers = read_csv("https://static.tcsbank.ru/documents/olymp/SAMPLE_CUSTOMERS.csv", ';') SampleAccounts = read_csv("https://static.tcsbank.ru/documents/olymp/SAMPLE_ACCOUNTS.csv",";",decimal =',') print SampleAccounts
SampleCustomers.head()
| tcs_customer_id | рдмреБрд░рд╛ | sample_type |
---|
0 | 1 | NaN | рдХрд╕реМрдЯреА |
---|
1 | 2 | 0 | рдЧрд╛рдбрд╝реА |
---|
2 | 3 | 1 | рдЧрд╛рдбрд╝реА |
---|
3 | 4 | 0 | рдЧрд╛рдбрд╝реА |
---|
4 | 5 | 0 | рдЧрд╛рдбрд╝реА |
---|
рдХрд╛рд░реНрдп рдХреА рд╢рд░реНрддреЛрдВ рд╕реЗ, рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирдореВрдирд╛ рдЦрд╛рддрд╛ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдЙрдзрд╛рд░рдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ, рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВ:
SampleAccounts.tcs_customer_id.drop_duplicates().count(), SampleAccounts.tcs_customer_id.count()
рд╣рдорд╛рд░реА рдзрд╛рд░рдгрд╛ рд╕рд╣реА рдереАред 280,942 рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЗ рдЕрдиреЛрдЦреЗ рдХрд░реНрдЬрджрд╛рд░ 50,000ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдХ рдЙрдзрд╛рд░рдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдХрдИ рдЛрдг рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдмреНрдпреВрд░реЛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ SampleAccounts рдкрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдЙрдзрд╛рд░рдХрд░реНрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реЛред
рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдЙрдзрд╛рд░рдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрджреНрд╡рд┐рддреАрдп рдЛрдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
SampleAccounts[['tcs_customer_id','open_date','final_pmt_date','credit_limit','currency']].drop_duplicates()
рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдореЗрдВ рдЛрдг рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ, рддреЛ рд╣рдо рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдЦреЗрддреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓реЗрдирд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣рдо рдЖрдЧреЗ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЕрдкреНрд░рд┐рдп рдХреНрд╖рдг рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ 'рдЕрдВрддрд┐рдо_pmt_date' рдлрд╝реАрд▓реНрдб рдореЗрдВ рд░рд┐рдХреНрдд рдорд╛рди рд╣реИрдВред рдЖрдЗрдП рдЙрдирд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдордиреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЛрдг рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╛рдкрди рддрд┐рдерд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рд╣реИ, рдФрд░ рдлрд╝реАрд▓реНрдб 'final_pmt_date' рднрд░рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдорд╛рди рдХреЛ рдЗрд╕рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП, рдмрд╕ 0 рд▓рд┐рдЦреЗрдВред
SampleAccounts.final_pmt_date[SampleAccounts.final_pmt_date.isnull()] = SampleAccounts.fact_close_date[SampleAccounts.final_pmt_date.isnull()].astype(float) SampleAccounts.final_pmt_date.fillna(0, inplace=True)
рдЕрдм рдЬрдм рд╣рдореЗрдВ рдЦрд╛рд▓реА рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рдЛрдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдмреНрдпреВрд░реЛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреА рдирд╡реАрдирддрдо рддрд┐рдерд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреИрд╕реЗ рдЕрдиреБрдмрдВрдз рдХреА рд╕реНрдерд┐рддрд┐, рдкреНрд░рдХрд╛рд░, рдЖрджрд┐ред
sumtbl = SampleAccounts.pivot_table(['inf_confirm_date'], ['tcs_customer_id','open_date','final_pmt_date','credit_limit','currency'], aggfunc='max') sumtbl.head(15)
| | | | | inf_confirm_date |
---|
tcs_customer_id | open_date | final_pmt_date | credit_limit | рдореБрджреНрд░рд╛ | |
---|
1 | 39,261 | 39,629 | 19,421 | RUB | 39,924 |
39,505 | 39,870 | 30000 | RUB | 39,862 |
39,644 | 40,042 | 11,858 | RUB | 40043 |
39,876 | 41701 | 300000 | RUB | 40,766 |
39,942 | 40,308 | 19,691 | RUB | 40,435 |
40,421 | 42,247 | 169,000 | RUB | 40,756 |
40,428 | 51,386 | 10000 | RUB | 40,758 |
40,676 | 41040 | 28,967 | RUB | 40,764 |
2 | 40,472 | 40,618 | 7551 | RUB | 40,661 |
40,652 | 40,958 | 21,186 | RUB | 40,661 |
3 | 39,647 | 40,068 | 22694 | RUB | 40069 |
40,604 | 0 | 20000 | RUB | 40,624 |
4 | 38,552 | 40,378 | 75000 | RUB | 40,479 |
39,493 | 39,797 | 5000 | RUB | 39823 |
39759 | 40123 | 6023 | RUB | 40125 |
рдЕрдм рд╣рдо рдкреНрд░рд╛рдкреНрдд рддрд╛рд░реАрдЦреЛрдВ рдХреЛ рдореБрдЦреНрдп рд╕реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
SampleAccounts = SampleAccounts.merge(sumtbl, 'left', left_on=['tcs_customer_id','open_date','final_pmt_date','credit_limit','currency'], right_index=True, suffixes=('', '_max'))
рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рд╣рдо рдЙрди рд╕реНрддрдВрднреЛрдВ рдХреЛ рддреЛрдбрд╝реЗрдВрдЧреЗ рдЬрд┐рдирдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрддрдВрдн рд╣реЛред рд╢рд░реНрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рджрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рд╡рд╛рд▓реЗ рдХреЙрд▓рдо рдирд┐рдореНрди рд╣реЛрдВрдЧреЗ:
- pmt_string_84m
- pmt_freq
- рдЯрд╛рдЗрдк
- рд╕реНрдерд┐рддрд┐
- рд╕рдВрдмрдВрдз
- bureau_cd
рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЕрдЧрд▓рд╛ рдХрджрдо рдлрд╝реАрд▓реНрдб рдХреЛ 'fact_close_date' рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднреБрдЧрддрд╛рди рдХреА рддрд╛рд░реАрдЦ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 2 рдорд╛рди рд╣реЛрдВ:
- 0 - рдЕрдВрддрд┐рдо рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдерд╛
- 1 - рдЖрдЦрд┐рд░реА рднреБрдЧрддрд╛рди рдерд╛
рдореИрдВрдиреЗ рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдЖрдзрд╛ рднрд░рд╛ рд╣реБрдЖ рдерд╛ред
SampleAccounts.fact_close_date[SampleAccounts.fact_close_date.notnull()] = 1 SampleAccounts.fact_close_date.fillna(0, inplace=True)
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ рд╕рднреА рдЛрдгреЛрдВ рдкрд░ рдирд╡реАрдирддрдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдКрдкрд░ рдкреНрд░рд╛рдкреНрдд
"inf_confirm_date_max" рдлрд╝реАрд▓реНрдб рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рдмреНрдпреВрд░реЛ рдореЗрдВ рдХреНрд░реЗрдбрд┐рдЯ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рдордп рд╕реАрдорд╛ рдЬреЛрдбрд╝реА:
PreFinalDS = SampleAccounts[SampleAccounts.inf_confirm_date == SampleAccounts.inf_confirm_date_max].drop_duplicates()
рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдирдореВрдирд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЛрдг рдФрд░ рдкреВрд░реНрд╡ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЙрдзрд╛рд░рдХрд░реНрддрд╛ рдХреА рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░реЗрдВрдЧреЗ:
PreFinalDS = PreFinalDS.groupby(['tcs_customer_id','open_date','final_pmt_date','credit_limit','currency']).max().reset_index()
рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдХреБрдЫ рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
- рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЙрд▓рдо рд╣рдЯрд╛ рджреЗрдВ
- рд░реВрдмрд▓ рдореЗрдВ рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯ рд╕реАрдорд╛рдПрдВ рд▓рд╛рдПрдВ
- рдмреНрдпреВрд░реЛ рд╕реЗ рдорд┐рд▓реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдЛрдг рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рддрдиреЗ рдЛрдгреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ
рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реНрддрдВрднреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
PreFinalDS = PreFinalDS.drop(['bki_request_date', 'inf_confirm_date', 'pmt_string_start', 'interest_rate', 'open_date', 'final_pmt_date', 'inf_confirm_date_max'], axis=1)
рдЕрдЧрд▓рд╛, рд╣рдо рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯ рд╕реАрдорд╛ рдХреЛ рд░реВрдмрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдирд┐рдордп рджрд░реЛрдВ рдХреЛ рд▓рд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд╕рдордп рдПрдХ рдХреЛрд░реНрд╕ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛ред рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
"urrency" рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдореБрджреНрд░рд╛рдУрдВ рдХреЛ рд░реВрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдЙрдкрд░реЛрдХреНрдд рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:
curs = DataFrame([33.13,44.99,36.49,1], index=['USD','EUR','GHF','RUB'], columns=['crs']) PreFinalDS = PreFinalDS.merge(curs, 'left', left_on='currency', right_index=True) PreFinalDS.credit_limit = PreFinalDS.credit_limit * PreFinalDS.crs
рдЗрд╕рд▓рд┐рдП, рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рд╕реЗрдЯ рдореЗрдВ рдЗрдХрд╛рдЗрдпреЛрдВ рд╕реЗ рднрд░рд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдпрд╛рдиреА рдЬрдм рд╣рдо рдЕрдВрддрд┐рдо рд╕рдореВрд╣рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рдкрд░ рджреА рдЧрдИ рд░рд╛рд╢рд┐ рдЙрдзрд╛рд░рдХрд░реНрддрд╛ рд╕реЗ рдЛрдг рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрдЧреА:
PreFinalDS['count_credit'] = 1
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдорд╛рддреНрд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ 0 рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рд╕рдореВрд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
PreFinalDS.fillna(0, inplace=True) FinalDF = PreFinalDS.groupby('tcs_customer_id').sum() FinalDF
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЦреИрд░, рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдЖрдк рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдирдореВрдиреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред
SampleCustomers рд╕реЗ рдХреЙрд▓рдо
"sample_type" рд╣рдореЗрдВ рдЗрд╕ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛, рдмрд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП SampleCustomers рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:
SampleCustomers.set_index('tcs_customer_id', inplace=True) UnionDF = FinalDF.join(SampleCustomers) trainDF = UnionDF[UnionDF.sample_type == 'train'].drop(['sample_type'], axis=1) testDF = UnionDF[UnionDF.sample_type == 'test'].drop(['sample_type'], axis=1)
рдЕрдЧрд▓рд╛, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдВрдХреЗрдд рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рдВрдбрд╛ рдХреЗ рд╕рд╛рде, рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
CorrKoef = trainDF.corr()
рдКрдкрд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж, CorrKoef рдореЗрдВ 61x61 рдЖрдХрд╛рд░ рдХрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдирд╛рдо рд╣реЛрдВрдЧреЗ, рдФрд░ рдЙрдирдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ - рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ рдХрд╛ рдореВрд▓реНрдпред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
| fact_close_date |
---|
status_13 | 0.997362 |
---|
рдПрдХ рдорд╛рдорд▓рд╛ рддрдм рд╕рдВрднрд╡ рд╣реИ рдЬрдм рдХреЛрдИ рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╛рди рдореВрд▓реНрдп рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
FieldDrop = [i for i in CorrKoef if CorrKoef[i].isnull().drop_duplicates().values[0]]
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдЙрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓реА, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- pmt_string_84m_6
- pmt_string_84m_8
- pmt_freq_5
- pmt_freq_A
- pmt_freq_B
- status_12
рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рд╣рд╕рдВрдмрдВрдз рдЧреБрдгрд╛рдВрдХ 90% рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ):
CorField = [] for i in CorrKoef: for j in CorrKoef.index[CorrKoef[i] > 0.9]: if i <> j and j not in CorField and i not in CorField: CorField.append(j) print "%s-->%s: r^2=%f" % (i,j, CorrKoef[i][CorrKoef.index==j].values[0])
рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:
fact_close_date -> status_13: r ^ 2 = 0.997362
ttl_delq_5_29 -> ttl_delq_30: r ^ 2 = 0.954740
ttl_delq_5_29 -> pmt_string_84m_A: r ^ 2 = 0.925870
ttl_delq_30_59 -> pmt_string_84m_2: r ^ 2 = 0.903337
ttl_delq_90_plus -> pmt_string_84m_5: r ^ 2 = 0.978249
delq_balance -> max_delq_balance: r ^ 2 = 0.986967
pmt_freq_3 -> relationship_1: r ^ 2 = 0.909820
pmt_freq_3 -> Currency_RUB: r ^ 2 = 0.910620
pmt_freq_3 -> count_credit: r ^ 2 = 0.911109
рдЗрд╕рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдореЗрдВ рдорд┐рд▓реЗ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдП рдЧрдП рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
FieldDrop =FieldDrop + ['fact_close_date','ttl_delq_30', 'pmt_string_84m_5', 'pmt_string_84m_A', 'pmt_string_84m_A', 'max_delq_balance', 'relationship_1', 'currency_RUB', 'count_credit'] newtr = trainDF.drop(FieldDrop, axis=1)
рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рдФрд░ рдЪреБрдирдирд╛
рдЦреИрд░, рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реИ рдФрд░ рдЕрдм рд╣рдо рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рд╕реЗ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрд▓рдЧ рдХрд░реЗрдВ:
target = newtr.bad.values train = newtr.drop('bad', axis=1).values
рдЕрдм рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирдореВрдиреЗ рдХреЗ рдЖрдпрд╛рдо рдХреЛ рдХрдо рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рдореБрдЦреНрдп рдШрдЯрдХ рд╡рд┐рдзрд┐ рдФрд░ рдЗрд╕рдХреЗ
рд╕реНрдХреЗрд▓реЗрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ
рдкреАрд╕реАрдП () рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реИрдВ ред рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╣рдо рдЙрди рдШрдЯрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ 20 рдХреЛ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рдереЗ)
coder = PCA(n_components=20) train = coder.fit_transform(train)
рд╡рд░реНрдЧреАрдХрд░рдг рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдХреБрдЫ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓реЗрддреЗ рд╣реИрдВ рдФрд░
рдПрд░рд┐рдпрд╛ рдЕрдВрдбрд░ рдЖрд░рдУрд╕реА рдХрд░реНрд╡ (
auc ) рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
models = [] models.append(RandomForestClassifier(n_estimators=165, max_depth=4, criterion='entropy')) models.append(GradientBoostingClassifier(max_depth =4)) models.append(KNeighborsClassifier(n_neighbors=20)) models.append(GaussianNB())
рдЗрд╕рд▓рд┐рдП рдореЙрдбрд▓ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВред рдЖрдЗрдП рдЕрдкрдиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдирдореВрдиреЗ рдХреЛ 2 рдЙрдк-рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ: рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдгред рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП auc рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХреЗрдВред рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛
рд╕реНрдХреЗрд▓реЗрд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ
train_test_split () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
TRNtrain, TRNtest, TARtrain, TARtest = train_test_split(train, target, test_size=0.3, random_state=0)
рдпрд╣ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
Auc рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ:
- Rol_auc_score рдпрд╛ auc рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреЗрд▓реЗрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдирдХ рд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛
- рддреГрддреАрдп-рдкрдХреНрд╖ ml_metrics рдкреИрдХреЗрдЬ рдФрд░ auc () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдореИрдВ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдХреЛ рдПрдХ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
Ml_metrics рдкреИрдХреЗрдЬ
рд╕реНрдХреЗрд▓реЗрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕реНрдХреЗрд▓реЗрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЖрд░рдУрд╕реА рд╡рдХреНрд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ:
plt.figure(figsize=(10, 10)) for model in models: model.fit(TRNtrain, TARtrain) pred_scr = model.predict_proba(TRNtest)[:, 1] fpr, tpr, thresholds = roc_curve(TARtest, pred_scr) roc_auc = ml_metrics.auc(TARtest, pred_scr) md = str(model) md = md[:md.find('(')] pl.plot(fpr, tpr, label='ROC fold %s (auc = %0.2f)' % (md, roc_auc)) pl.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6)) pl.xlim([0, 1]) pl.ylim([0, 1]) pl.xlabel('False Positive Rate') pl.ylabel('True Positive Rate') pl.title('Receiver operating characteristic example') pl.legend(loc="lower right") pl.show()
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдврд╛рд▓ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдиреЗ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рджрд┐рдЦрд╛рдпрд╛, рдЗрд╕рдХреА рд╕рдЯреАрдХрддрд╛ рд▓рдЧрднрдЧ 69% рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдЪреБрдиреЗрдВрдЧреЗред рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рднрд░реЗрдВ, рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░реЗрдВ:
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ 69% рдХреА рдкреНрд░рд╛рдкреНрдд рдореЙрдбрд▓ рд╕рдЯреАрдХрддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдкреВрд░реНрдг рдЖрдпрд╛рдо рдореЗрдВ рдмрдирд╛рддреЗ рд╕рдордп, рдЕрд░реНрдерд╛рддред рд╕рд╣рд╕рдВрдмрджреНрдз рдХреЙрд▓рдо рдФрд░ рдЖрдпрд╛рдореА рдХрдореА рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЗрд╕рдиреЗ 69% рд╕рдЯреАрдХрддрд╛ рднреА рджреА (рдЗрд╕реЗ рдореЙрдбрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрди рдбреАрдПрдл рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рднреА рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдП рдЧрдП рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╕рдорд░реНрдерди рд╡реЗрдХреНрдЯрд░ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереА, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЙрдбрд▓ рдХреА рд╕рдЯреАрдХрддрд╛ 51% рддрдХ рдЧрд┐рд░ рдЧрдИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рдЬреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд╡рд╣ рд▓рдЧрднрдЧ 60% рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ред рд╕рдордп рдХреА рд▓рд╛рдЧрддред
рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдирдореВрдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЯреВрд░реНрдирд╛рдореЗрдВрдЯ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред