рдХрд╛рдЧрд▓: рдЪрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ - рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ

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



рд╕рд╛рдЗрдЯ рдФрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдХрд╛рдЧрд▓ рдПрдордПрд▓ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ (рд╢реБрд░реБрдЖрддреА рд╕реЗ рд▓реЗрдХрд░ рд╢рд╛рдВрдд рдкреЗрд╢реЗрд╡рд░реЛрдВ рддрдХ) рдФрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд▓ рд╣реИ (рдЕрдХреНрд╕рд░ рдПрдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдкреБрд░рд╕реНрдХрд╛рд░ рдкреВрд▓ рдХреЗ рд╕рд╛рде)ред

рдПрдордПрд▓ рдХреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдореЗрдВ рддреБрд░рдВрдд рдЙрддрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдПрдХ рдЧрдВрднреАрд░ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЪреБрдирдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдРрд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рдерд╛: рдЯреВ рд╕рд┐рдЧреНрдорд╛: рдиреНрдпреВрдЬ рдЯреВ рдкреНрд░реАрдбрд┐рдХреНрдЯ рд╕реНрдЯреЙрдХ рдореВрд╡рдореЗрдВрдЯреНрд╕ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛ рд╕рд╛рд░ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд╢реЗрдпрд░реЛрдВ рдХреА рдХреАрдордд рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╣реИред рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдкреБрд░рд╕реНрдХрд╛рд░ рдХреЛрд╖ $ 100,000 рд╣реИ, рдЬреЛ рдЙрди рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ 7 рд╕реНрдерд╛рди рдЬреАрддреЗ рдереЗред

рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╣реИ:

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

рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рд╢рд░реНрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП -1 рдЯреЛрдкреА [y} _ {ti} \ [-1,1] $ рдореЗ рдЗрд╕рдореЗрдВ рдПрд╕реЗрдЯ рдкрд░ рд░рд┐рдЯрд░реНрди рдмрдврд╝реЗрдЧрд╛ред рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдкрд░ рд╡рд╛рдкрд╕реА рдХреЛ рдкреВрд░реЗ рдмрд╛рдЬрд╛рд░ рдкрд░ рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рдХреНрд╖реНрдп рдореАрдЯреНрд░рд┐рдХ рдХрд╕реНрдЯрдо рд╣реИ - рдпрд╣ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд RMSE рдпрд╛ MAE рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди рд╢рд╛рд░реНрдк рдЕрдиреБрдкрд╛рдд , рдЬрд┐рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ:

 textрд╕реНрдХреЛрд░= frac рдмрд╛рд░xt sigma(xt)

рдЬрд╣рд╛рдБ
xt= sumi hatytirtiutiред
rti- 10 рджрд┐рди рдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдкрд░ рджрд┐рди рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╛рд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдВрдкрддреНрддрд┐ рдкрд░ рд╡рд╛рдкрд╕реА,
uрддреА- рдмреВрд▓рд┐рдпрди рд╡реИрд░рд┐рдПрдмрд▓ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджрд┐рди рдХреЗ рд▓рд┐рдП рд╡реИрд▓реНрдпреВрдПрд╢рди рдореЗрдВ рдИрде рдПрд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ,
 barxt- рдФрд╕рдд рдореВрд▓реНрдп xtред
 рд╕рд┐рдЧреНрдорд╛(xt)- рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди xtред

рд╢рд╛рд░реНрдк рдЕрдиреБрдкрд╛рдд рдЬреЛрдЦрд┐рдо-рд╕рдорд╛рдпреЛрдЬрд┐рдд рд░рд┐рдЯрд░реНрди рд╣реИ, рдЧреБрдгрд╛рдВрдХ рдХреЗ рдореВрд▓реНрдп рд╡реНрдпрд╛рдкрд╛рд░реА рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:

  • 1 рд╕реЗ рдХрдо: рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди
  • 1 - 2: рдордзреНрдпрдо, рд╕рд╛рдорд╛рдиреНрдп рджрдХреНрд╖рддрд╛,
  • 2 - 3: рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди,
  • 3 рд╕реЗ рдЕрдзрд┐рдХ: рдПрдХрджрдо рд╕рд╣реАред

рдорд╛рд░реНрдХреЗрдЯ рдореВрд╡рдореЗрдВрдЯ рдбреЗрдЯрд╛
  • рд╕рдордп (datetime64 [ns, UTC]) - рд╡рд░реНрддрдорд╛рди рд╕рдордп (22:00 рдпреВрдЯреАрд╕реА рдкрд░ рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдЖрдВрджреЛрд▓рди рдкрд░ рдбреЗрдЯрд╛ рдореЗрдВ)
  • рдПрд╕реЗрдЯрдХреЛрдб (рдСрдмреНрдЬреЗрдХреНрдЯ) - рдПрд╕реЗрдЯ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░
  • рдПрд╕реЗрдЯрдиреЗрдо (рд╢реНрд░реЗрдгреА) - рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рд╕рдореВрд╣ рдХрд╛ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
  • рдмреНрд░рд╣реНрдорд╛рдВрдб (рдлреНрд▓реЛрдЯ64) - рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреЛрд░ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВ
  • рд╡реЙрд▓реНрдпреВрдо (рдлреНрд▓реЛрдЯ64) - рджреИрдирд┐рдХ рдЯреНрд░реЗрдбрд┐рдВрдЧ рд╡реЙрд▓реНрдпреВрдо
  • рдмрдВрдж (рдлреНрд▓реЛрдЯ64) - рдЗрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкрди рдореВрд▓реНрдп
  • open (float64) - рдЗрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рдХреАрдордд
  • ReturnClosePrevRaw1 (float64) - рдкрд┐рдЫрд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рдЙрдкрдЬ
  • рд░рд┐рдЯрд░реНрдирдСрдирдкреНрд░реЗрд╡рдЖрд░ 1 (рдлреНрд▓реЛрдЯ64) - рдкрд┐рдЫрд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдУрдкрдирд┐рдВрдЧ рд╕реЗ рд▓рд╛рднрдкреНрд░рджрддрд╛
  • ReturnClosePrevMktres1 (float64) - рдкрд┐рдЫрд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рд▓рд╛рднрдкреНрд░рджрддрд╛, рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдорд╛рдпреЛрдЬрд┐рдд
  • рд░рд┐рдЯрд░реНрдирдСрдирдкреНрд░реЗрд╡рдореЗрддреНрд░рд╕ 1 (рдлреНрд▓реЛрдЯ64) - рдкрд┐рдЫрд▓реЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдУрдкрдирд┐рдВрдЧ рд╕реЗ рд▓рд╛рднрдкреНрд░рджрддрд╛, рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдорд╛рдпреЛрдЬрд┐рдд
  • ReturnClosePrevRaw10 (float64) - рдкрд┐рдЫрд▓реЗ 10 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реАрдм рд╕реЗ рдЙрдкрдЬ
  • рд░рд┐рдЯрд░реНрдирдСрдирдкреНрд░реЗрд╡ рдЖрд░ 10 (рдлреНрд▓реЛрдЯ64) - рдкрд┐рдЫрд▓реЗ 10 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдУрдкрдирд┐рдВрдЧ рд╕реЗ рд▓рд╛рднрдкреНрд░рджрддрд╛
  • ReturnClosePrevMktres10 (float64) - рдкрд┐рдЫрд▓реЗ 10 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реАрдм рд╕реЗ рдЙрдкрдЬ, рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдорд╛рдпреЛрдЬрд┐рдд
  • рд░рд┐рдЯрд░реНрдирдСрдкреЗрдирдкреНрд░реЗрд╡рдореЗрддреНрд░реЗ 10 (рдлреНрд▓реЛрдЯ64) - рдкрд┐рдЫрд▓реЗ 10 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдУрдкрдирд┐рдВрдЧ рд╕реЗ рдЙрдкрдЬ, рдмрд╛рдЬрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдорд╛рдпреЛрдЬрд┐рдд
  • ReturnOpenNextMktres10 (float64) - рдЕрдЧрд▓реЗ 10 рджрд┐рдиреЛрдВ рдореЗрдВ рдЦреБрд▓реЗ рдореЗрдВ рдЦреБрд▓реЗ рд╕реЗ рдЙрдкрдЬ, рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдХреА рдЖрд╡рд╛рдЬрд╛рд╣реА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рддред рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░реЗрдВрдЧреЗред


рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛
  • рд╕рдордп (рдбреЗрдЯрд╛рдЯрд╛рдЗрдо 64 [рдПрдирдПрд╕, рдпреВрдЯреАрд╕реА]) - рдпреВрдЯреАрд╕реА рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдореЗрдВ рд╕рдордп
  • sourceTimestamp (datetime64 [ns, UTC]) - UTC рдкреНрд░рдХрд╛рд╢рди рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рд╕рдордп
  • FirstCreated ( рдбреЗрдЯрд╛рдЯрд╛рдЗрдо64 [ns, UTC]) - рдбреЗрдЯрд╛ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ UTC рдореЗрдВ рд╕рдордп
  • sourceId (рдСрдмреНрдЬреЗрдХреНрдЯ) - рд░рд┐рдХреЙрд░реНрдб рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
  • рд╢реАрд░реНрд╖рдХ (рд╡рд╕реНрддреБ) - рд╢реАрд░реНрд╖рдХ
  • рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ (int8) - рд╕рдорд╛рдЪрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ (1: рд╕рддрд░реНрдХ, 3: рд▓реЗрдЦ)
  • takeSequence (int16) - рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ, рдХреБрдЫ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╕рдВрдЦреНрдпрд╛
  • рдкреНрд░рджрд╛рддрд╛ (рд╢реНрд░реЗрдгреА) - рд╕рдорд╛рдЪрд╛рд░ рдкреНрд░рджрд╛рддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
  • рд╡рд┐рд╖рдпреЛрдВ (рд╢реНрд░реЗрдгреА) - рд╕рдорд╛рдЪрд╛рд░ рд╡рд┐рд╖рдп рдХреЛрдб рдХреА рдПрдХ рд╕реВрдЪреА (рдПрдХ рднреМрдЧреЛрд▓рд┐рдХ рд╕рдВрдХреЗрдд, рдШрдЯрдирд╛, рдЙрджреНрдпреЛрдЧ рдХреНрд╖реЗрддреНрд░, рдЖрджрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
  • рджрд░реНрд╢рдХреЛрдВ (рд╢реНрд░реЗрдгреА) - рджрд░реНрд╢рдХреЛрдВ рдХреА рд╕реВрдЪреА рд╕рдорд╛рдЪрд╛рд░ рдХреЛрдб
  • bodySize (int32) - рд╕рдорд╛рдЪрд╛рд░ рд╢рд░реАрд░ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
  • companyCount ( int8 ) - рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
  • рд╣реЗрдбрд▓рд╛рдЗрдирдЯреИрдЧ (рдСрдмреНрдЬреЗрдХреНрдЯ) - рдереЙрдорд╕рди рд░реЙрдпрдЯрд░реНрд╕ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реАрд░реНрд╖рдХ рдЯреИрдЧ
  • marketCommentary (рдмреВрд▓) - рдПрдХ рд╕рдВрдХреЗрдд рдЬреЛ рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдЬрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ
  • рд╡рд╛рдХреНрдпрдХрдВрдЯ (int16) - рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
  • рд╢рдмреНрджрдХрд╛рдЙрдВрдЯ (int32) - рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдФрд░ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
  • рдПрд╕реЗрдЯрдХреЛрдб (рд╢реНрд░реЗрдгреА) - рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреА рд╕реВрдЪреА
  • рдПрд╕реЗрдЯрдиреЗрдо (рд╢реНрд░реЗрдгреА) - рдПрд╕реЗрдЯ рдЧреНрд░реБрдк рдХреЛрдб
  • FirstMentionSentence (int16) - рдПрдХ рд╡рд╛рдХреНрдп рдЬреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ:
  • рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ (рдлреНрд▓реЛрдЯ 32) - 0 рд╕реЗ 1 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдорд╛рдЪрд╛рд░ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
  • рд╕реЗрдВрдЯрд┐рдореЗрдВрдЯрдХреНрд▓рд╛рд╕ (int8) - рд╕рдорд╛рдЪрд╛рд░ рдЯреЙрдиреНрд╕рд┐рд▓рд┐рдЯреА рдХреНрд▓рд╛рд╕
  • рднрд╛рд╡реБрдХрддрд╛рдкреВрд░реНрдг (рдлреНрд▓реЛрдЯ 32) - рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдЬ рдХреА рд░рд╛рдд рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ
  • sentNameNutral (рдлреНрд▓реЛрдЯ 32) - рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд░ рддрдЯрд╕реНрде рд╣реИ
  • рднрд╛рд╡реБрдХрддрд╛рдкреВрд░реНрдг (рдлреНрд▓реЛрдЯ 32) - рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ
  • sentimentWordCount (int32) - рдкрд╛рда рдореЗрдВ рдЙрди рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ
  • рдиреЙрд╡реЗрд▓реНрдЯреАрдХрд╛рдЙрдВрдЯ 12 рдПрдЪ ( рдЗрдВрдЯ 16 ) - 12 рдШрдВрдЯреЗ рдореЗрдВ "рдирд╡реАрдирддрд╛" рд╕рдорд╛рдЪрд╛рд░, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реА рдЦрдмрд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЧрдгрдирд╛ рдХреА рдЧрдИ
  • рдиреЙрд╡реЗрд▓реНрдЯреАрдХрд╛рдЙрдВрдЯ 24 рдПрдЪ ( рдЗрдВрдЯ 16 ) - рд╡рд╣реА, 24 рдШрдВрдЯреЗ рдореЗрдВ
  • рдиреЙрд╡реЗрд▓реНрдЯреАрдХрд╛рдЙрдВрдЯ 3 рдбреА ( рдЗрдВрдЯ 16 ) - рд╡рд╣реА, 3 рджрд┐рдиреЛрдВ рдореЗрдВ
  • рдиреЙрд╡реЗрд▓реНрдЯреАрдХрд╛рдЙрдВрдЯ 5 рдбреА ( рдЗрдВрдЯ 16 ) - рд╡рд╣реА, 5 рджрд┐рдиреЛрдВ рдореЗрдВ
  • рдиреЙрд╡реЗрд▓реНрдЯреАрдХрд╛рдЙрдВрдЯ 7 рдбреА ( рдЗрдВрдЯ 16 ) - рд╡рд╣реА, 7 рджрд┐рдиреЛрдВ рдореЗрдВ
  • VolumeCounts12H (int16) - 12 рдШрдВрдЯреЗ рдореЗрдВ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╛рдЪрд╛рд░ рдХреА рдорд╛рддреНрд░рд╛
  • volumeCounts24H (int16) - рд╡рд╣реА, 24 рдШрдВрдЯреЗ рдореЗрдВ
  • VolumeCounts3D (int16) - рд╡рд╣реА, 3 рджрд┐рдиреЛрдВ рдореЗрдВ
  • VolumeCounts5D (int16) - рд╡рд╣реА, 5 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП
  • VolumeCounts7D (int16) - рд╡рд╣реА, 7 рджрд┐рдиреЛрдВ рдореЗрдВ


рдХрд╛рд░реНрдп рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмрд╛рдЗрдирд░реА рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╣рдо рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдХреЗрдд рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рддреЗ рд╣реИрдВ, рд╡реГрджреНрдзрд┐ (1 рд╡рд░реНрдЧ) рдпрд╛ рдХрдореА (0 рд╡рд░реНрдЧ) рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреАред

рдЯреВрд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


рдХрд╛рдЧрд▓ рдХрд░реНрдиреЗрд▓ рдПрдХ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИ рдЬреЛ рд╕рд╣рдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдЧреБрдард▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  • рдкрд╛рдпрдерди рд▓рд┐рдкрд┐
  • рдЖрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
  • рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ
  • RMarkdown

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

  • рд╕реАрдкреАрдпреВ: 4 рдХреЛрд░,
  • рд░реИрдо: 17 рдЬреАрдмреА,
  • рдбреНрд░рд╛рдЗрд╡: 5 рдЬреАрдмреА рд╕реНрдерд╛рдпреА рдФрд░ 16 рдЬреАрдмреА рдЕрд╕реНрдерд╛рдпреА,
  • рдЕрдзрд┐рдХрддрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рди рд╕рдордп: 9 рдШрдВрдЯреЗ (рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рдордп рдпрд╣ 6 рдШрдВрдЯреЗ рдерд╛)ред

GPU, рдХрд░реНрдиреЗрд▓ рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдореЗрдВ GPU рдирд┐рд╖рд┐рджреНрдз рдерд╛ред

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

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

рдореЙрдбрд▓ рд╕рддреНрдпрд╛рдкрди


рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╕реНрдерд╛рдиреАрдп рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

  1. рдкрд╛рд░ рд╕рддреНрдпрд╛рдкрди рдмрдирд╛рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг / рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ рдореЗрдВ рд╕рд░рд▓ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╡рд┐рднрд╛рдЬрди;
  2. рдЖрд░рдУрд╕реА рдПрдпреВрд╕реА рдмрдирд╛рдо рд╢рд╛рд░реНрдк рдЕрдиреБрдкрд╛рдд рдХреА рд╕реНрдерд╛рдиреАрдп рдЧрдгрдирд╛ред

рдирддреАрдЬрддрди, рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдирд┐рдХрдЯрддрдо рдкрд░рд┐рдгрд╛рдо, рдХрд╛рдлреА рд╣рдж рддрдХ, рдЖрдиреБрдкрд╛рддрд┐рдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдПрдХ рд╕рдВрдпреЛрдЬрди рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ (рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрди 0.85 / 0.15) рдФрд░ рдПрдпреВрд╕реА рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ред рдХреНрд░реЙрд╕ рд╕рддреНрдпрд╛рдкрди рд╕рдВрднрд╡рдд: рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреА рдЕрд╡рдзрд┐ рдореЗрдВ рдмрд╛рдЬрд╛рд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред AUC рдиреЗ рд╢рд╛рд░реНрдк рдЕрдиреБрдкрд╛рдд рд╕реЗ рдмреЗрд╣рддрд░ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд┐рдпрд╛ - рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред

рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕


рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдп рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рд╣реИ, рдкрд╣рд▓реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдПрдХ рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ ( рдЖрд░рдПрдирдПрди ), рдпрд╛ рдмрд▓реНрдХрд┐, рдЗрд╕рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдПрд▓рдПрд╕рдЯреАрдПрдо рдФрд░ рдЬреАрдЖрд░рдпреВ ред

рдЖрд╡рд░реНрддрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдореБрдЦреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдореВрдирд╛ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдХреНрд░рдо рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐:

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

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

рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдпрд╛рд░реА рдЬрд┐рддрдиреА рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреА рднреЛрд▓реА рдереА: рд╣рдо рдкреВрд░реЗ рдмрд╛рдЬрд╝рд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рд╕рдкреНрддрд╛рд╣ рдХреЗ рджрд┐рди, рдорд╣реАрдиреЗ, рд╕рдкреНрддрд╛рд╣ рдХреА рд╕рдВрдЦреНрдпрд╛), рдФрд░ рд╣рдо рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдЫреВрддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рдореЙрдбрд▓ рдиреЗ t = 10 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛:

model = Sequential() model.add(LSTM(256, activation=act.tanh, return_sequences=True, input_shape=(data.timesteps, data.features))) model.add(LSTM(256, activation=act.relu)) model.add(Dense(data.assets, activation=act.relu)) model.add(Dense(data.assets)) 

рдЗрд╕ рдореЙрдбрд▓ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдЪреЛрдбрд╝рд╛ рдЧрдпрд╛, рд╕реНрдХреЛрд░ рд╢реВрдиреНрдп (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╢реВрдиреНрдп) рдХреЗ рдкрд╛рд╕ рдерд╛ред

рдЯреЗрдореНрдкреЛрд░рд▓ рдХрдиреНрд╡реЛрдХреЗрд╢рдирд▓ рдиреЗрдЯрд╡рд░реНрдХ


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



рдкрд╣рд▓рд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рдлрд▓ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдореЙрдбрд▓ рдерд╛, рдЬрд┐рд╕рдореЗрдВ TCN рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ GRU рдкрд░рдд рд╢рд╛рдорд┐рд▓ рд╣реИ:

 model = Sequential() model.add(Conv1D(512,3, activation=act.relu, padding='causal', input_shape=(data.timesteps, data.features))) model.add(Conv1D(100,3, activation=act.relu, padding='causal', dilation_rate=2)) model.add(Conv1D(100,3, activation=act.relu, padding='causal', dilation_rate=4)) model.add(GRU(256)) model.add(Dense(data.assets, activation=act.relu)) 

рдРрд╕рд╛ рдореЙрдбрд▓ рд╕реНрдХреЛрд░ = 0.27668 рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдереЛрдбрд╝реА рдЯреНрдпреВрдирд┐рдВрдЧ (рдЯреАрд╕реАрдПрди рдлрд┐рд▓реНрдЯрд░, рдмреИрдЪ рдЖрдХрд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛) рдФрд░ рдЯреА рдореЗрдВ 100 рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 0.41092 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

 batch_size = 512 model = Sequential() model.add(Conv1D(8,3, activation=act.relu, padding='causal', input_shape=(data.timesteps, data.features))) model.add(Conv1D(4,3, activation=act.relu, padding='causal', dilation_rate=2)) model.add(Conv1D(4,3, activation=act.relu, padding='causal', dilation_rate=4)) model.add(GRU(16)) model.add(Dense(1, activation=act.sigmoid)) 

рдЕрдЧрд▓рд╛ рд╣рдо рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдФрд░ рдбреНрд░реЙрдкрдЖрдЙрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

рдХреЛрдб
 batch_size = 512 dropout_rate = 0.05 def channel_normalization(x): max_values = K.max(K.abs(x), 2, keepdims=True) + 1e-5 out = x / max_values return out model = Sequential() if(data.timesteps > 1): model.add(Conv1D(16,2, activation=act.relu, padding='valid', input_shape=(data.timesteps, data.features))) model.add(Lambda(channel_normalization)) model.add(SpatialDropout1D(dropout_rate)) model.add(Conv1D(16,1, padding='valid')) for i in range(1, 6): model.add(Conv1D(16,2, activation=act.relu, padding='valid', dilation_rate=2**i)) model.add(Lambda(channel_normalization)) model.add(SpatialDropout1D(dropout_rate)) model.add(Conv1D(16,1, padding='valid')) model.add(Flatten()) else: model.add(Flatten(input_shape=(data.timesteps, data.features))) model.add(Dense(256, activation=act.relu)) model.add(Dense(1, activation=act.sigmoid)) 


рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ (t = 1 рдХреЗ рд╕рд╛рде), рд╣рдореЗрдВ рд╕реНрдХреЛрд░ = 0.53578 рдорд┐рд▓рддрд╛ рд╣реИред

рдЧреНрд░реИрдбрд┐рдПрдВрдЯ рдмреВрд╕реНрдЯрд┐рдВрдЧ рдорд╢реАрдиреЗрдВ


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

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

рдЬреАрдмреАрдПрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрдЯрдмреИрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХрд╛ рдПрдХ рдХрд╛рдлреА рдкреНрд░рд╕рд┐рджреНрдз рдврд╛рдВрдЪрд╛ред

рдпрд╣рд╛рдБ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдореЙрдбрд▓ рдФрд░ рдбреЗрдЯрд╛ рддреБрд░рдВрдд 0.64 рдХрд╛ рд╕реНрдХреЛрд░ рджреЗрддрд╛ рд╣реИ:

рдХреЛрдб
 def prepare_data(marketdf, newsdf): # a bit of feature engineering marketdf['time'] = marketdf.time.dt.strftime("%Y%m%d").astype(int) marketdf['bartrend'] = marketdf['close'] / marketdf['open'] marketdf['average'] = (marketdf['close'] + marketdf['open'])/2 marketdf['pricevolume'] = marketdf['volume'] * marketdf['close'] newsdf['time'] = newsdf.time.dt.strftime("%Y%m%d").astype(int) newsdf['assetCode'] = newsdf['assetCodes'].map(lambda x: list(eval(x))[0]) newsdf['position'] = newsdf['firstMentionSentence'] / newsdf['sentenceCount'] newsdf['coverage'] = newsdf['sentimentWordCount'] / newsdf['wordCount'] # filter pre-2012 data, no particular reason marketdf = marketdf.loc[marketdf['time'] > 20120000] # get rid of extra junk from news data droplist = ['sourceTimestamp','firstCreated','sourceId','headline','takeSequence','provider','firstMentionSentence', 'sentenceCount','bodySize','headlineTag','marketCommentary','subjects','audiences','sentimentClass', 'assetName', 'assetCodes','urgency','wordCount','sentimentWordCount'] newsdf.drop(droplist, axis=1, inplace=True) marketdf.drop(['assetName', 'volume'], axis=1, inplace=True) # combine multiple news reports for same assets on same day newsgp = newsdf.groupby(['time','assetCode'], sort=False).aggregate(np.mean).reset_index() # join news reports to market data, note many assets will have many days without news data return pd.merge(marketdf, newsgp, how='left', on=['time', 'assetCode'], copy=False) import lightgbm as lgb print ('Training lightgbm') # money params = { "objective" : "binary", "metric" : "binary_logloss", "num_leaves" : 60, "max_depth": -1, "learning_rate" : 0.01, "bagging_fraction" : 0.9, # subsample "feature_fraction" : 0.9, # colsample_bytree "bagging_freq" : 5, # subsample_freq "bagging_seed" : 2018, "verbosity" : -1 } lgtrain, lgval = lgb.Dataset(Xt, Yt[:,0]), lgb.Dataset(Xv, Yv[:,0]) lgbmodel = lgb.train(params, lgtrain, 2000, valid_sets=[lgtrain, lgval], early_stopping_rounds=100, verbose_eval=200) 


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

рдереЛрдбрд╝реА рд╕реБрд╡рд┐рдзрд╛ (FirstMentionSentence, marketCommentary, sentimentClass) рдЬреЛрдбрд╝рдХрд░, рдФрд░ ROC AUC рдХреЗ рд╕рд╛рде рдореАрдЯреНрд░рд┐рдХ рдХреА рдЬрдЧрд╣ рд▓реЗрдиреЗ рдкрд░, рд╣рдореЗрдВ 0.65389 рдХрд╛ рд╕реНрдХреЛрд░ рдорд┐рд▓рддрд╛ рд╣реИред

рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рдЯреБрдХрдбрд╝реА


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

рдЦреЛрдЬрдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдлрд╝реАрдЪрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ


EDA рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдмрд╛рдд рдереАред рдпрд╣ рдкрдврд╝рдХрд░ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╣рдо рдРрд╕реА рддрд╕реНрд╡реАрд░ рдмрдирд╛рддреЗ рд╣реИрдВ (рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдЪрд┐рддреНрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ):



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



рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 10 рджрд┐рдиреЛрдВ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж, рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рд╢рд╛рдпрдж рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬреАрдмреАрдПрдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ 10 рджрд┐рдиреЛрдВ рдХреА рджреЗрд░реА (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рд╣реИ) рдХреЗ рд╕рд╛рде рдЦрд╛рддреЗ рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред

рдлрд╝реАрдЪрд░ рдЪрдпрди рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рднреА рдПрдордПрд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЖрдЗрдП, рдореБрдЦреНрдп рдШрдЯрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг ( PCA ) рдирд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler market_x = market_data.loc[:,features] scaler = StandardScaler() scaler.fit(market_x) market_x = scaler.transform(market_x) pca = PCA(.95) pca.fit(market_x) market_pca = pca.transform(market_x) 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреАрд╕реАрдП рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:



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

рдареАрдХ рдЯреНрдпреВрдирд┐рдВрдЧ рдФрд░ рдХреНрдпрд╛ рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ


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

  • lightgbm рдкреИрд░рд╛рдореАрдЯрд░ (рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рдХрд╛рд░, рдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕реАрдЦрдиреЗ рдХреА рджрд░ рдФрд░ рдЕрдиреНрдп),
  • рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓ ( рдЯреАрд╕реАрдПрди рдлрд┐рд▓реНрдЯрд░ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬреАрдЖрд░рдпреВ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдбреНрд░реЙрдкрдЖрдЙрдЯ рджрд░, рд╕реАрдЦрдиреЗ рдХреА рджрд░, рд╕реЙрд▓реНрд╡рд░ рдкреНрд░рдХрд╛рд░) рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ред

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

рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп


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

рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛ рд╕рдорд╛рдзрд╛рди:


рдЖрдпрд╛рдд
 import numpy as np import pandas as p import itertools import functools from kaggle.competitions import twosigmanews from sklearn.preprocessing import StandardScaler, LabelEncoder import tensorflow as tf from keras.models import Sequential, Model from keras.layers import Dense, GRU, LSTM, Conv1D, Reshape, Flatten, SpatialDropout1D, Lambda, Input, Average from keras.optimizers import Adam, SGD, RMSprop from keras import losses as ls from keras import activations as act import keras.backend as K import lightgbm as lgb 


рдбреЗрдЯрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
 # fix random from numpy.random import seed seed(42) from tensorflow import set_random_seed set_random_seed(42) env = twosigmanews.make_env() (market_train_df, news_train_df) = env.get_training_data() def cleanData(market_data, news_data):   market_data = market_data[(market_data['returnsOpenNextMktres10'] <= 1) & (market_data['returnsOpenNextMktres10'] >= -1)]   return market_data, news_data def prepareData(marketdf, newsdf, scaler=None):   print('Preparing data...')     print('...preparing features...')   marketdf = marketdf.copy()   newsdf = newsdf.copy()   # a bit of feature engineering   marketdf['time'] = marketdf.time.dt.strftime("%Y%m%d").astype(int)   marketdf['bartrend'] = marketdf['close'] / marketdf['open']   marketdf['average'] = (marketdf['close'] + marketdf['open'])/2   marketdf['pricevolume'] = marketdf['volume'] * marketdf['close']     newsdf['time'] = newsdf.time.dt.strftime("%Y%m%d").astype(int)   newsdf['position'] = newsdf['firstMentionSentence'] / newsdf['sentenceCount']   newsdf['coverage'] = newsdf['sentimentWordCount'] / newsdf['wordCount']   # filter pre-2012 data, no particular reason   marketdf = marketdf.loc[marketdf['time'] > 20120000]     # get rid of extra junk from news data   droplist = ['sourceTimestamp','firstCreated','sourceId','headline','takeSequence','provider',               'sentenceCount','bodySize','headlineTag', 'subjects','audiences',               'assetName', 'wordCount','sentimentWordCount', 'companyCount',                'coverage']   newsdf.drop(droplist, axis=1, inplace=True)   marketdf.drop(['assetName', 'volume'], axis=1, inplace=True)     # unstack news   newsdf['assetCodes'] = newsdf['assetCodes'].apply(lambda x: x[1:-1].replace("'", ""))   codes = []   indices = []   for i, values in newsdf['assetCodes'].iteritems():       explode = values.split(", ")       codes.extend(explode)       repeat_index = [int(i)]*len(explode)       indices.extend(repeat_index)   index_df = p.DataFrame({'news_index': indices, 'assetCode': codes})   newsdf['news_index'] = newsdf.index.copy()   # Merge news on unstacked assets   news_unstack = index_df.merge(newsdf, how='left', on='news_index')   news_unstack.drop(['news_index', 'assetCodes'], axis=1, inplace=True)     # combine multiple news reports for same assets on same day   newsgp = news_unstack.groupby(['time','assetCode'], sort=False).aggregate(np.mean).reset_index()     # join news reports to market data, note many assets will have many days without news data   res = p.merge(marketdf, newsgp, how='left', on=['time', 'assetCode'], copy=False) #, right_on=['time', 'assetCodes'])   res.marketCommentary = res.marketCommentary.astype(float)     targetcol = 'returnsOpenNextMktres10'   target_presented = targetcol in res.columns   features = [col for col in res.columns if col not in ['time', 'assetCode', 'universe', targetcol]]     print('...scaling...')   if(scaler == None):       scaler = StandardScaler()       scaler = scaler.fit(res[features])   res[features] = scaler.transform(res[features])   print('...done.')   return type('', (object,), {       'scaler': scaler,       'data': res,       'x': res[features],       'y': (res[targetcol] > 0).astype(int).values if target_presented else None,       'features': features,       'samples': len(res),       'assets': res['assetCode'].unique(),       'target_presented': target_presented   }) def generateTimeSeries(data, n_timesteps=1):     data.data[data.features] = data.data[data.features].fillna(data.data[data.features].mean())   #data.data[data.features] = data.data[data.features].fillna(0)   assets = data.data.groupby('assetCode', sort=False)     def grouper(n, iterable):       it = iter(iterable)       while True:          chunk = list(itertools.islice(it, n))          if not chunk:              return          yield chunk     def sample_generator():       while True:           for assetCode, days in assets:               x = days[data.features].values               y = (days['returnsOpenNextMktres10'] > 0).astype(int).values if data.target_presented else None               for i in range(0, len(days) - n_timesteps + 1):                   yield (x[i: i + n_timesteps], y[i + n_timesteps - 1] if data.target_presented else 0)     def batch_generator(batch_size):       for batch in grouper(batch_size, sample_generator()):           yield tuple([np.array(t) for t in zip(*batch)])     n_samples = functools.reduce(lambda x,y : x + y, map(lambda t : 0 if len(t[1]) + 1 <= n_timesteps else len(t[1]) - n_timesteps + 1, assets))   return type('', (object,), {       'gen': batch_generator,       'timesteps': n_timesteps,       'features': len(data.features),       'samples': n_samples,       'assets': list(map(lambda x: x[0], filter(lambda t : len(t[1]) + 1 > n_timesteps, assets)))   }) 


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдбрд▓
 def buildRNN(timesteps, features):   i = Input(shape=(timesteps, features))   x1 = Lambda(lambda x: x[:,:,:13])(i)   x1 = Conv1D(16,1, padding='valid')(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = GRU(10)(x1)   x1 = Dense(1, activation=act.sigmoid)(x1)   x2 = Lambda(lambda x: x[:,:,13:])(i)   x2 = Conv1D(16,1, padding='valid')(x2)   x2 = GRU(10, return_sequences=True)(x2)   x2 = GRU(10, return_sequences=True)(x2)   x2 = GRU(10, return_sequences=True)(x2)   x2 = GRU(10)(x2)   x2 = Dense(1, activation=act.sigmoid)(x2)   x = Average()([x1, x2])   model = Model(inputs=i, outputs=x)   return model def train_model_time_series(model, data, val_data=None):   print('Building model...')   batch_size = 4096     optimizer = RMSprop()     # define roc_callback, inspired by https://github.com/keras-team/keras/issues/6050#issuecomment-329996505   def auc_roc(y_true, y_pred):       value, update_op = tf.metrics.auc(y_true, y_pred)       metric_vars = [i for i in tf.local_variables() if 'auc_roc' in i.name.split('/')[1]]       for v in metric_vars:           tf.add_to_collection(tf.GraphKeys.GLOBAL_VARIABLES, v)       with tf.control_dependencies([update_op]):           value = tf.identity(value)           return value     model.compile(loss=ls.binary_crossentropy, optimizer=optimizer, metrics=['binary_accuracy', auc_roc])     print(model.summary())     print('Training model...')     if(val_data == None):       model.fit_generator(data.gen(batch_size),           epochs=8,           steps_per_epoch=int(data.samples / batch_size),           verbose=1)   else:       model.fit_generator(data.gen(batch_size),           epochs=8,           steps_per_epoch=int(data.samples / batch_size),           validation_data=val_data.gen(batch_size),           validation_steps=int(val_data.samples / batch_size),           verbose=1)   return type('', (object,), {       'predict': lambda x: model.predict_generator(x, steps=1)   }) 


GBM рдореЙрдбрд▓
 def train_model(data, val_data=None):   print('Building model...')     params = {       "objective" : "binary",       "metric" : "auc",       "num_leaves" : 60,       "max_depth": -1,       "learning_rate" : 0.01,       "bagging_fraction" : 0.9,  # subsample       "feature_fraction" : 0.9,  # colsample_bytree       "bagging_freq" : 5,        # subsample_freq       "bagging_seed" : 2018,       "verbosity" : -1 }     ds, val_ds = lgb.Dataset(data.x.iloc[:,:13], data.y), lgb.Dataset(val_data.x.iloc[:,:13], val_data.y)   print('...training...')   model = lgb.train(params, ds, 2000, valid_sets=[ds, val_ds], early_stopping_rounds=100, verbose_eval=100)   print('...done.')     return type('', (object,), {       'model': model,       'predict': lambda x: model.predict(x.iloc[:,:13], num_iteration=model.best_iteration)   }) 


рдЯреНрд░реЗрдирд┐рдВрдЧ
 n_timesteps = 30 market_data, news_data = cleanData(market_train_df, news_train_df) dates = market_data['time'].unique() train = range(len(dates))[:int(0.85*len(dates))] val = range(len(dates))[int(0.85*len(dates)):] train_data_prepared = prepareData(market_data.loc[market_data['time'].isin(dates[train])], news_data.loc[news_data['time'] <= max(dates[train])]) val_data_prepared = prepareData(market_data.loc[market_data['time'].isin(dates[val])], news_data.loc[news_data['time'] > max(dates[train])], scaler=train_data_prepared.scaler) model_gbm = train_model(train_data_prepared, val_data_prepared) train_data_ts = generateTimeSeries(train_data_prepared, n_timesteps=n_timesteps) val_data_ts = generateTimeSeries(val_data_prepared, n_timesteps=n_timesteps) rnn = buildRNN(train_data_ts.timesteps, train_data_ts.features) model_rnn = train_model_time_series(rnn, train_data_ts, val_data_ts) 


рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА
 def make_predictions(data, template, model):   if(hasattr(data, 'gen')):       prediction = (model.predict(data.gen(data.samples)) * 2 - 1)[:,-1]   else:       prediction = model.predict(data.x) * 2 - 1   predsdf = p.DataFrame({'ast':data.assets,'conf':prediction})   template['confidenceValue'][template['assetCode'].isin(predsdf.ast)] = predsdf['conf'].values   return template day = 1 days_data = p.DataFrame({}) days_data_len = [] days_data_n = p.DataFrame({}) days_data_n_len = [] for (market_obs_df, news_obs_df, predictions_template_df) in env.get_prediction_days():   print(f'Predicting day {day}')   days_data = p.concat([days_data, market_obs_df], ignore_index=True, copy=False, sort=False)   days_data_len.append(len(market_obs_df))   days_data_n = p.concat([days_data_n, news_obs_df], ignore_index=True, copy=False, sort=False)   days_data_n_len.append(len(news_obs_df))   data = prepareData(market_obs_df, news_obs_df, scaler=train_data_prepared.scaler)   predictions_df = make_predictions(data, predictions_template_df.copy(), model_gbm)   if(day >= n_timesteps):       data = prepareData(days_data, days_data_n, scaler=train_data_prepared.scaler)       data = generateTimeSeries(data, n_timesteps=n_timesteps)       predictions_df_s = make_predictions(data, predictions_template_df.copy(), model_rnn)       predictions_df['confidenceValue'] = (predictions_df['confidenceValue'] + predictions_df_s['confidenceValue']) / 2       days_data = days_data[days_data_len[0]:]       days_data_n = days_data_n[days_data_n_len[0]:]       days_data_len = days_data_len[1:]       days_data_n_len = days_data_n_len[1:]   env.predict(predictions_df)   day += 1 env.write_submission_file() 


рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╛рдзрд╛рди:



рдХреЛрдб (рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐)
 def buildRNN(timesteps, features):   i = Input(shape=(timesteps, features))   x1 = Lambda(lambda x: x[:,:,:13])(i)   x1 = Conv1D(16,1, padding='valid')(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = GRU(10)(x1)   x1 = Dense(1, activation=act.sigmoid)(x1)   model = Model(inputs=i, outputs=x1)   return model 


рджреЛрдиреЛрдВ рдирд┐рд░реНрдгрдпреЛрдВ рдиреЗ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо (рд▓рдЧрднрдЧ 0.69) рджрд┐рдпрд╛, рдЬреЛ 2,927 рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ 566 рдХреЗ рдЕрдиреБрд░реВрдк рдерд╛ред рдирдП рдбреЗрдЯрд╛ рдХреЗ рдкрд╣рд▓реЗ рдорд╣реАрдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрджреЛрдВ рдХреЛ рдордЬрдмреВрддреА рд╕реЗ рдорд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛, рдФрд░ 3.69251 рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╢реЗрд╖ 697 рдЯреАрдореЛрдВ рд╕реЗ 65 рд╡реЗрдВ рд╕реНрдерд╛рди рдкрд░ рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдЕрдЧрд▓реЗ рдкрд╛рдВрдЪ рдорд╣реАрдиреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред

рдореИрдВрдиреЗ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛?


рдХрд╕реНрдЯрдо рдореЗрдЯреНрд░рд┐рдХреНрд╕


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

рд▓рд╛рдЗрдЯрдмреИрдо рдХреЗ рд▓рд┐рдП рдореАрдЯреНрд░рд┐рдХ:

 def sharpe_metric(y_pred, train_data): y_true = train_data.get_label() * 2 - 1 std = np.std(y_true * y_pred) mean = np.mean(y_true * y_pred) sharpe = np.divide(mean, std, out=np.zeros_like(mean), where=std!=0) return "sharpe", sharpe, True 

рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдореАрдЯреНрд░рд┐рдХ рдПрдпреВрд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрджрддрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдзреНрдпрд╛рди рдХрд╛ рддрдВрддреНрд░


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

 def buildRNN(timesteps, features):     def attention_3d_block(inputs):       a = Permute((2, 1))(inputs)       a = Dense(timesteps, activation=act.softmax)(a)       a = Permute((2, 1))(a)       mul = Multiply()([inputs, a])       return mul     i = Input(shape=(timesteps, features))   x1 = Lambda(lambda x: x[:,:,:13])(i)   x1 = Conv1D(16,1, padding='valid')(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = attention_3d_block(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = attention_3d_block(x1)   x1 = GRU(10, return_sequences=True)(x1)   x1 = attention_3d_block(x1)   x1 = GRU(10)(x1)   x1 = Dense(1, activation=act.sigmoid)(x1)   model = Model(inputs=i, outputs=x1)   return model 

рдпрд╣ рдореЙрдбрд▓ рдмрд╣реБрдд рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╕реНрдХреЛрд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХреА, рдпрд╣ рд▓рдЧрднрдЧ 0.67 рдирд┐рдХрд▓рд╛ред

рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рдерд╛


рдХрдИ рдХреНрд╖реЗрддреНрд░ рдЬреЛ рдЖрд╢рд╛рдЬрдирдХ рджрд┐рдЦрддреЗ рд╣реИрдВ:


рдирд┐рд╖реНрдХрд░реНрд╖


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

рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо:

  • рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕реНрдХреЛрд░: ~ 0.69 рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ 1.5ред рдЕрд╕реНрдкрддрд╛рд▓ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдХреА рддрд░рд╣ рдХреБрдЫ, 0.7 рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХреБрдЫ рд╕реЗ рджреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдгрдп рдХрд╛ рдЕрдзрд┐рдХрддрдо рд╕реНрдХреЛрд░ рднреА ~ 0.69 рдерд╛, рдореЗрд░реА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХред
  • рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рд░рдЦреЗрдВ: 2927 рдореЗрдВ рд╕реЗ 566ред
  • рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ рд╕реНрдХреЛрд░: рдкрд╣рд▓реЗ рдорд╣реАрдиреЗ рдХреЗ рдмрд╛рдж 3.19251ред
  • рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ рд░рдЦреЗрдВ: рдкрд╣рд▓реЗ рдорд╣реАрдиреЗ рдХреЗ рдмрд╛рдж 697 рдореЗрдВ рд╕реЗ 65ред

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

рд╕рдВрджрд░реНрдн


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

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


All Articles