From c1223ed2cb9a31b516d484454c3899de2c6e2cb0 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 4 Jan 2022 12:28:12 +0530 Subject: [PATCH] v0.4.0 changelog: - module AutoArima may give incorrect output with exogenous variables when length of y_var element is more than 1. --- data/input/test_time_series.xlsx | Bin 24769 -> 24767 bytes logs/cov.out | 4 ++-- logs/pylint/lib-timeseries-py.out | 8 ++++---- mllib/lib/timeseries.py | 5 +++-- requirements.txt | 8 ++++---- tests/test_timeseries.py | 14 ++++++++++---- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/data/input/test_time_series.xlsx b/data/input/test_time_series.xlsx index d9b3d0b024537075a28b37440cfcb1b7cad7fad5..395be646bd57345d3e9779c289d2eb0a244e060b 100644 GIT binary patch delta 20873 zcmZs>by!s27dJXXcZZ;ebR&XvcMshmB3;rA2ar&@J0*q&>6DThLK^ArQUnwbxJSRg z=RWUypUYpf=IpcLv({ewv)9nm1MTX8;;AbmqmV!_FfbtK{PfzN@JOL3e?QbSLB){% zeM+)LW(AOJ6Pt+DJ#x5DEX(J#GaF8OP?2@-f*s(vcbD}q2yCWQM;JL$hN6CKt0(C5K=`bk^nI|kaI7)m-5ErUqh`iZNHJ6iD6d-!{-SUUaJsLwaO3Z_W=`B4Wb z({YStYbVE%8JHgI4`8w&|&QHBnqrs5rwm|#^s_!H|Wwe==Q_~?%zY$ z2_hJPDN5zfT*MQ`&nu=LjgPsy*dDg5$?Os7^jOT%&Acn~dv0NuYHcJK#DSt2;@U&l z$w8M+Q_gjqAGi6T+3bmCwr!GrVn=NuS+RAJ4M%#bjbKy5$g)ZLIcCYlK=tL@h24XI zB=;Q08dXy@6>Ni(vEq>#6?KCtI~oTf4!ssAAT~pTyq}nu&GU!$yCGH#u}QNX?jVgF zvLp??4`0~{_Gs2zZBCVEIU8{cYaCfWd7lw&Zc141^)|*_ z4tP(V~CeD>ee7ZAS5IZ$p2m3^$KVnNWd$y)M#;jtnv)ORgT zJac@t$nqMe>Neo&^<2!XaQ5#B&OJ9#zUv~Qh{6YH>S*3K=XHl0?tQcM)L%0nyz`m^ zTUe^esKc?I#{E8Z4s8{n&5qOGHq5JVO0IC?EdNZ!CTFQ)s~O;?akr&mQ46VH??!?S z!NpoG}Y2&5-O>svBGTS%1?$fgEC@<^K(MCZmqiu!htF zSs^HI6`7$WRD_Hm1yzRr84Oj1vm2A&MUyN(2tu2Qp^*1H2+J{?R3U^%E1qibDPZd}Ne z+*H1*tyH?_ms9jFw!!#vS<`4Pi>+m7$O0y0A!v@U$6svq!pqRQZ8hHAe4%hzB;V0S zUT+|OWZfX>NC5A&q=dkqo84=_0v5?Ixi~z`uEVCi#;(^ zfa80QjoacgSOiy21ZB7F^UMF9y+1ZY%H}NIOZ=ZWadb^|0Gn z3ItF8r<`Ks97zDKN)vtkpEmCQj9nN{?KU81!@@0x1isiF7=n^?cGLeHxw=}+zIs2M z+HWPY*}%2?6Zj|csqVQvbvB&IAG3`UIMH_)aDzQ&QR@b+(!qpNxwfG2;f7y>U&mzdafm&nFr=Og|b+uw{MgE=F@!n4t=Z(uEzxR`WEk@NKNJRiw249`=Yvbx*a6YsysHcgI(BdY z%#DI3v@r0g77|R^EnhQhnqjYj1&b_;g%DnBulQGVpIgsB{;JA{U0}Lbzfc>Xj&c*SH~W-9|r`Df03uG^dkw3@QI@qRHoHhbDYT5y&?5MK3iH|n2EVaooN z(G_OIv^=emHBIQUSock38;rYR>VINK28Mu%(mc3n=r$WHKV`h%ot|n0ipCD!3!LD9 z<<7CABj*T{|6;ob|9OA`ia%xliR5s%$@iP9Q;kLUhc7o9tUqO7>`v3$f@zY;z5;F1 z!mzjIKsBKPCm^^`m~yK)hzO>O5EuZ80LKp+TQ?yZ7&=*&V)itwBeg*=hv0AW>BnvL zFt&jI-lPJ-*vxJ+odVMmDqsS-4oYG1NAdqwgZWJYOG9MqpOycfrv3#QGy*P_%1%8+ z_edlDayS?E{^&sqJdSagtU&#j5DP&iv2v~;)h~Blj<)gA zr5qCA{rrc18`xj~8FQ(+mk0|%9dUCm3#2}VfI44l<)R2OGtQ5c*7NBkeQ`m7hF=EXlnc?NPQ#S z-7%_!hE;TCigr9wheL*-S%0-Fv&J5P%(HHmYKg*$tZwX!8+jo*8uY;+wI|ULqa_{i zAp~ytthxtB7 zp)<3w8hZR!{<^(Yu`#D6KOfz? zgB5cv&J(0LD;SnvVp}r>)U6(1e~0cJ)Si*D>Pzq8$AfflWq>x)M`Px^8}0qJRO^X; z_Razt{&z?m4^!un>>;Byit%_I&WNRRq@PQE^{Ja&_dffG8Kxjg_IQVai$?_ylBu=9 z-xun6n8x{MR>m>Do|Q-FEdEc&w>&|Y z4-k(B9waoI0TOnNh#=%lZ1cZXOllA^6{AlJc|sr6t zap{UYk9^NV?98j)q_LuXehltw>}v;nirsOXKDm9}h{!wTe>*6iM?Hrk%0b}s$NO;R zj}P;e4nL6VH!J3_wmiF}*NW<@=B4TsAbo%Qu%Ju}Nx8C~v^BV6vKhGcEFyo9;PpZoXk68Ez z3R+F0V_q8ZHaE8xHr;uL3<~A&bs1LOUv2#8{oD%J=~eUz74yH+&RUuOI{47_`|k5e zSKze6;oUL(=Jl0wds!23R~+coRo&J%{zHI!EADL#SzJF3!&BCuYbgRR5e|Ru_C9@k zW1ttMoO8Y9gS(mqApa%44h3{}xVR9=px6JG_(J}Vzj`<^(f_V^og|q5eM&-*(gADA zeOv^AziOC$-cEbIQLq(Or@(-rFh#z7(dseDh&$}Ka_=|oS@HPvvP zy8Xe)t?Lxc-L;=AVPAu5Pz9WdCA-cgJD!PDXH+)@iZkqg|IykUt=)W`DQJ8H@Ea-< zc%kRHgb6#*YRPkcr?cqmW;zIPeW*2z=Z=|v8J)zHTb)RsHD2d_wZPknvoCD)ZTPez zIjQALX!CT@>Gl%$NkoR+x_z>KpF|!4c!2*w{hOBAOq3CACEjM%oa4@1&wBetUTduin3%$DvtYEBhJaiHX{2MJCC5 zk=`Pe?>V1H+G9<65*X$d)x|c>hvVN=elcPaGPq?!C~3Z~GB`#`Ng^SnWr(Jc@$Ev= zbW0I+aaF_Kq_ld}h=#JG*xrzJl2UHtpzS!IMRWrwK#b%)Ox-%;WehGr_#Op!Q*_3@ zlYfoo80mR0G(C(C3PDKSPGkOeZA=6XCAVcV9^x|fZ&B1NWOE|Vzi(}v{#X&e`wEY% z32gfew6wP0-8bfp9_h_Dzdc)BS-$^$cl7XQ`sUZpWktkb#gdmE^_f#m7jQR!6fysB z(f4q3y4QZ&CF0-mInZAgzXb^ReSaA-IQaG9`|eoZ68?N%_0y8}uk+0pOlN1O;wGX~ zZ_fb#pWm`>!>dv*pqJzW)ty*(2X zRa5O6xhXka-Geu$sT@zw-o5(lfA8n}-P+d;_8sAJ>)+l1 z4{yEB_T7Ad%O4w=_s2hHi7zWeygfxm&%x2t!jyH}Zk zH{K6B*AWjczkVK^ZgmlmHZ*;{d-vd_nte&Vy!PjJ@b2&SqhE2asIR>*_ry&>7jC`p zPM2J|9?pL!n1V%jcd^$FKK_1sb2pn77bk-1+uDA6|1-~KV66-IY$+u^MRz9lQ#rd@ zJaC);=4RGt;GRuXJZ!$^-qY*X0oWbIh*am&-v&OMEjeFnF{Hw zTv>VbTmFx6ANBMVXZreAy+5-)x&23adKc4q)p=Ia%gtQ?<;~$nS94tG{qYgg0RH{e z!>xS1lYO|@u{9&`KJ1~*=NA}+B|JT*nKQ8XgIF@qYK1sZTaj5i?wX941kP0+R*1iL zwcj7y&}}qd``_~T2E&_wS^c^Z_m|HWb9k`w6gLeBT>pA@UGTO`L}WFic9D1JtK^g3l%k=egB*ENBFl}rGm#Q1-Ie7OYpMxM|nTrG2FO`Hn zs*~u%Dwi)T0dmv|Gl{azvI?|?{Sp#YmR6xRZapHmJtBTXZiFI!cTRQ2wUkK*ib-Bb z0`}|Jp-0ehpHFjoxJrTCc=b=v>YqFt(W!m%azxReh$&{6FLQV#&S6f%N^oKSO;b+_ z^JnF#r|VUuTE;yjs=1MIG`};WSxAYWq7y$Q+>kWfzyL7RLY!lU86$=Td)6w0Wdweh z7+(ws5r1K7*oVTZ?sVSarFu|~x`wbvo%t!>1Q^cR|b#PVRL3A`@fuG z=UAV`WYC|>mr<)KpjX51x7h2kuvTbt#xg`}(&V&_DPu_Y5@&*d$v9iqwxt`s=M?-h58_v^rpHH)P)Z5nZ71vU+{? zLlsdJylY&a*j~<_1bKmsF<-Rr>P)}-Eu=2o;d~p2`rS4PQEDNgb4+d=FfTOTv_VsB z1t1=^8jBl|6H-k{7E6Z#T*`I41J-BoWYT#`MPohFMZOHXia%oPW}$AnALL?$Hhml1 z8`Oo-%BVQvZCnj4HmMN9iElW1tXUYKi>NhZziWt+JR33_)M02WOdJIEQ?Epz>f8)4 z-BT1E38&Ph>E@D0@{FVqS3)K-R348HX-s%Mv5^k)*b z;mlMnB4f(l)K$D3Bv~4fs!>J8@g2yd2k&yW(O%HyGw4vN?g+fbRGh@Suu6H|NIDLj z(=N)h!LS+N?onB&nOdiDOc14k1hm9g(G<@<{MuJ^Upx-EoWeBj#z;#Zm*;UN4%qWo zT2nCxs(B2(gi3`AXL9fqlsvW}5(~-P36aSWA`+fc{Iqh!%0s-qOld-oHX=#jY?-^V z$}2It`FN}o%%r8$i{psG5MoHNLjQq~Xa|8_NT)xN# zZenMKRJlgzLyzB|O&(55US<^CxJ%44P>6^^wIi$BSPU&yUnXD2GCV$#riIJ;>?jxt z`8anXeIr~ew1mH_<565V2s*Abuxzo_=3Mw;3*R)7&YN#$V(13;uFs>9qM2ctWu*Cd z`&Wew@Q6e$&dlB5RApI&e~{9G4^a|#uMjfxq={V>%YgCcF?JvG$2g_1%-^JA)A6O{ z&wW?|8+I?$-IU%o`xFVzwlYaDoJD12FRxlbc05j_YMO2cwD&Ebbgn6}Q&{TqNB#|m z7wR5}t>E3@>=8hRkrGL}slQc`p>7O>w ze468>r09!OYOI2*g@|;*wXB!g988$2vG`V$h9noSl=zYO@A9gbqS~3~!iypk&a#I+ z#1cE|(HYTyz$Sxmm)A7la^eFWuiyq6qnB8*4faB zI+kD_(I)N3263l-hX77`2{n-lE$-lTPOdCS%$CtRJh2K zsT*#q`fft*Vh7YxshTsS`8A)j3SqrV9>ZYYQil8 z`M&>AK9A*g*Ac+ZFVEukk(qNMm0kPdc;z7h6c*bAX=>jLa^zPUvHXFSw!M#Jgd}=< zU7RRve~vFs!+eTONf`Z-7ou}61Kw5MeU{#v_j^<&gRK2g6RimnTIfH|1ldGxk{J(O zHi0I;SF=bT%K2g8s6GCKlCT(R1TA;XCCcdE=aY8ZZ4r;2D}vf-9>g{07w4AO3PIHY zj{+6g0G3q{{i@qD`}Lu~c*c}SlGu3bPizt#9wQ^PbtIoe5F!YiG2+v8gtK4D1$Ud12t`ZqY^t2(l95SRUx7YB@O#8sd z#x?Des9_}T-08`)=CKC-#5@)`5C66xLNR5@b|mdOErx+A zMe9xE*9}Uz>cvWf`Ka2#EV8VS*=?JtMHiG0tqr|y3fnq+nKM4jkJg8=)1r}qlw-!l z6hXa%>wH-wPriR1EXx;fq3GKOAD8CX8l;lH!MC54vo=^V$ zmJKOo0Tzd5nA|h2Vssy*{A1iG^^AAe@fP6m5`3Y~)$n0R7Ei8)){n0e(l{%4YqGME z`(yH)N9vm8(mYBc5Fyn_3`rq5C($`04YH`0s!=}dh$l^3i$PV*A94piljeJ`Me`Z@ zIjuz(rdWp}w4P!%Vz7!>S`eD~e{8hhKIKEE-^-XDEOfx~F5y9x{L$^9kjEa!K!xLU zHenQHn{G(RC&Dr+MJ&<@r(oMJgwyf@6$|j?yxH)L^nx}Os^dDC(&&uDI{FB-v+MBn zqaAg`!3~%gz~BLOf(HZ3-v~CXzp-bJ$@r-K7(E|4v6}TmJS! z8>%w<Q~r>c4LrR zjIDybnCcpkQyxWOuu37~fqp2%`VD>m84;*yf@K{_e|w_E8awJ*b-sZ8Xu~}RD|Z)_ zk0FLE6BA4IAfO=>kH9jR0D>wXB{F2kW zN1_jP@8rc+HGL8ro_{q_AN5BHR9QelQN>EEnIg-%m^z_RaG?r$&n|@|+CY$)#^>X+ z1k2DiC400{ZWoH7{-lQXjojveik&*;>K8KG5!$=v)S#9mQfwv&YsLyOi#KFK&$X8a z;5diB(libsG$^|x&F3^eDD<$B5~?4PT_#d$PmzZ(1tAy{{`}y!6Gdizp|;x(-{+v9 zoTZ0~iXfzC!4va*WZI@IBYs9ZwT|K0X7Z8?QmMY`sFo&`BQ$wGwm;=q6Ne9BxPYqK zW1%A!yzAWk%O)lxet>-n+Xj>V8>0c>?T1uK;#QuNGL~Wuxin(2$tRCnc;w+9U1F9K zEm95f?Dl$E^@3+AT{gG687KCoPTCN$M8aKz@hzhzV-WY+!Zl?cN9+3I=u%l-^hz5n zboaQ_42t1VT4jWx+>L561gg!|?}FC)k_kKj2jlm(D$BHWUf{`*ctAk-34xWuSxdRY zIt7gtZq2lE8YGDy0R*;*pJFMVWjKDNF{mD_D>r=-T?+GIfp~nmvhm4C=wPq=SZVp} zd1sqAQvS!9Srx@gLL~K)r5~Fxf5`Kn3FKTM$ef9%uXMg;$SaRU7g;3)kEdz~8!_xb zS>^J0_Qjz2SsWjxj9x*wg?#|S&W~wg`92K|qw0nTp7qqpV&?LnPbC;M$(Q@&>Tr$( z3qO6@B{Jtee1t1%bh&5%J$!#MSVLO}i? zA2p2AU*u2DLB{|mdIn*QH~x^M(>erV&2$t((?=B({hMQdLpN6ptX>H(iYf-|nZ!D{ z16!$Vl|#5cQYoNa$FG&5N@NXLiT?1xr6R|b^(Cs@MCvm~ehI2cQA1_2QiiITL{!Uu zM6@IXky@WH>w+iYs>*IasAb1e{&*e<&6_DILigp!h*L9V6$|!E@)Tf?YNJF-fRdkm z&B~xEOpr%^VZ!%fdP-Gs#R?+los!-D(bja}*2cpizYR!!wW!<8^3m=KjzlW*g4q#@ zI^$}@Q1kNSDu?t3>`Y0`oOEdUxh#CUUvAF&Q*J#ExIu!2wB|$_k=#oKA1ytP{e>^v{1K zvsV3*x&THD^TAGPpc7R1&nHyFe590vpehJzxv@JWvj2J*p>#s=thHah@`avSlcLG} zryxSkq5K^z_2nPkQxS^gS3{%GsUK05G<)}(&w~&7)$erO)WxI(rhhj48aqaZHffO`IR$55Qiv3RVdln)LFw{=VKVVF{aw= z^zN#L8!Q|6IMlNckKEZLvdUFxAc&$DOwU)2L5IjXQ0(7ummU7Wjn(-`rgsk&+7#VDFERW zg`{?2SUS3o8?YMkl6jaQw8F39<=i@u#0m`LvZ8FwXJp0NNOT<o;8 zll*%geyj4zGgu7e$JjHh6M@_xeUYAVPua2}EYXKJwAMm@|49>>LZ{0Bg zaueI@oS8gqkn&(9t~WyM)w-;KJ_EQ5EHw}Ic_g@Zj)6gQV}}jm9G7&)=(n}o8T~v%|&8ecPWa}XRHV$TO7;*WzzZ(?!!jhIPvpblD zx=M~syRfd=v|=AiwefS$ETcsRoVi{2D`a?Qc=Fsjslv1sJ5xeE!6ZnC7Vv98sZtL? z7{hfZ88Ras;th>lv$Y3kAVl-o^BFt_N%=D4A*SMXM&}iWd`C751_j5-^21dj$jT`L zI1+PyY4FN&Ola~*<&fgWmL5wWWKl5X7EN7VB~CY!lvS0Y!j2SEw6S~x)AmIYLKmvQ zDbLye-2^lDCky?;`ht!JK!sdNS0_I*g0)kO6VZgVUF-=B?ubrZtt5%!k#LQvWKv#v zNVMpaG4&BbQJ44P%$oe@>L)AFteryDY_!Zuj$IJRr8d{~gC~356=vX!-tmVA496VWT!}<73TQST&advhSg4kdKT+PaP{2fCoWnWDY z80kdtqbM77@SP_NQhZ&?oWybiO?4)xQ#IqKl}8Og5sR89Bo=Ee6t6S<$cJZq0ExQhG}8zmjOG=i5T&jcZ9kT08$Th1{?c^yTn_9%u&mMOXFP|^jOAb;W*$>3 zH7toAp4xMLDSs@dhqCo%X$_$bAa<*TrM5h)nu_4_QbDp%U_$30bGl->R_gd^z%&DKoh9|bT zkgP4!8@+vQ^ByO+&(>7o&L*YpZ#0ORSYhuqI5rnguX8J0*`q?Tshnv)BwQdxt)4bL zCi~i4Y4})dr~b;S!F=T}+zj@ECvMMPp4DbKRwX4Jy2^bczeYca4H4p&;u0$#S#T5T z?$O8rcnf8ZuOfqhGIL>=gU8}Ll)FwYjnTvUD7w}tn3jS&FA`ff{5{!A`ihPi(jL4i zr79{;D-M!+?$%_aFEn- zH-hQ|ml8d1L(M*9Q}UFtZ4kP%AxZ`5NBA8_Y*s?TNoLt?WoxCUB9!&987hq}tG2G} zO~O%N7^$kYR+@QR(X~s4{3W`J^--+I`s-VrDvlk~8LtY_L9E#TqMD+ovOL+-X>9x+4XqnVbH_n}Q1*R!`-e3@7MQ!LPJ^Horw28rKV4-{H z5m_%<-pKo$nklH5y}HwxEuO=huOK_rIpArIU8?7tKf~;CWkj>pn)akhOBYJ>9|}83 z9Bq@9PQx~;ij%C-`36i~XqvBkA1B8NErc}(Oa_B&qtsjz=r(xz{iTW9>k z#?-9j0qe9VxLCwOhc;Y&RsJ!f$G{8eW2+q!YRqW-l>L6X8lSQRmZWG|I?xiDA)O&!%nSNA_1ft~R66u65;iq-rjF zg{>d78AZrs`NaxlWuJ*I@#LyeE5YaGmyw_eECBAi;FJ8g+LCIf?tHg+&gJ=&P-K$5 zJ=Md-5ems`GkU$e#I<{kKt{@scn*3f?aB8WALk@B*gUk3!0kJgp#~uxvdv3o$RKpL zM?TX0)H6_?=tm~-WyFY1S6~+VfV$d=O1qic@sr2$y{PRHzH9J-ZPMh6HxSDkMSbGS zC17pws>^$^ebdKu;LbVbD1RV@CUMRsf@$OV8>`Tb8T^xZWL|q6VSSYL@4uID$(!)7 zj502lgq)~_rY#EnURzk-Q1o!EN!-Zg7=-V7E=*nZc~nLS@v%@HY4Dp`>OxrM#2_== zWD>1Q;T1c^&A2bWRO}|PWgmuJ;HQ0hiU9Nvf|_IfUbiA^d-lUv#XaOEIBKRy&fA;2 zk|U9%{U<*0K!laDfAtktL`>b%yVY|nVDbc!z>C+NcFHT7ZvwM z`N07elgpQD=bgg>S5>7}U-z5xkS~yaZui8PA*)b}k=!W3itKKJoU>NiN3V8uhJeSH zyT+a6mwmDo5g&CJ!DAS;sP5;;1DcU+y+}{bovmjkDB=00ZH1E_glU&{9Y zMCDZ5$50+Yq_f)yqUFL_f1rk;qsR;+72vJ?Hp?i6RaAU1GfgfK!G7j#3=lfBORb<* z#|aJoaqd4XFi+Wmf=yu5{xNbJWr{K5^Sf!#scU^@q*!`y4@(R^6k)@?*Da>F>NQG9 zi$YGoX?aLDgfymEOOtm61JT4Vf#5Ajd^GJ#isNEH-H!Ba?s-j1vbm5D5@z3}U68NN zZV?FabPbuX1Yt_UY7sF1LYjHa&-&-w2eOxiveMaYsm@_qo$SU0;mY%n;)<6!pf|!5 zb>|Qro4D-kHe`HB{u^RF^PBCe=nxKPJVmAe$Rh(EYQ-y5HZgt42WQg9`H?9rg@%JC z$km8XQ09+G4ase-Sdy*p92+|1V)j%BWyS3<*@gG3or&bp0H7rhSG@~CSp#nHUu=D* zOrdoHF3r#dXP@?to8HPCWB3NHt$X1^uP)jR@( z(9skpIjok8rv$a4c2RNUx7Xkhae%{xwVGarN_iNl&IVYJ8JZovYsl4Ja|MnZ&P2H-v^1nYR~L5pYBvxq4%GM~QA!gr9_pp{Y1oiC`Yd8D**Fr8Y#D4amRcW>! zu-hnTSr`!u+Q8zM3S(<02J5|(>G|vqW)JN(xs&FvplAEjo+Indaa?DPa_wGk6R0js|Td00HpX|&sn%Rd-V`3KF=9T#BF+73mM(*l{ zf4qj*F*H+GXrpQ?)V>U_3c@a%*Yd=8iBg}|2GRzHOZ`WjG`*cAAo_rJI{}M$O6(N#Umi zYbwjbRznR#j*>^tIft)Ttja?yM(wkeM;;$#;;ij1mbJ^58|NRH`Q9n9USNm%CU7eUum?LT$9ce!M+gCA2pH-$3vJk~^$R0u8am1&{iL z2@2_r6uS27o`mk)y?ommki7v%vI1ELw@sVWw@EwdYGY#U>ZuntRLy$TH|{9iiJ$yW z>e=6=6MDW84bT2a!?#1&9TG01juB-hUx}|*iOH&)p*9KbpEpJIZc?@S2f;~p^)Km; zlLntUVrDB<3ZT0JEr^m|Y}xO!*lpLnO<9XK40&m)%2#0^KS=0W)l5)O8CFx&J^P9= zGLnO1j5RBp=V3vFgNdn*PvV$f?vlE-B5&};wnbZ2pRS6aK6io53D*D`RK7Mb|)n)m`{{Cdamu!E&~bp zDBho`L=V&#{xagCA2K_{0-1=0!&6QR9-=y(aAmMt>2_6TA(avZNL*e)5aTe;1P3)0 zi@@X`l5X$0BRgmxRo#zroV*#6pXc1(h~%S_tvG#W50XyGmeeDW3w%w<+pS#YBmxdLJ|$qdgK)yiAm zhO5zU5m)SFeZ8jE*@1v}6Uz2p17n-p2<4UNBBzwhPLJhWj>b!*8P4?!IhXxwd^~cI*LUUpMs?PR5^g z$JtqJZ@j~3lx|LwpMA1U;k0^kBYzuwl8T5BjrJ}bEBp-(q>VIke*Im6?3o9Y=8=?e z^;C;ZIr)^h@sU-jho#MDQ1>=qe-k|C(J-07FnP~7D$K{H&&{`;rGIkzj)rsJ{xc-H z-|4&~iF)-YJtArar@y*^4Xl^9CO5K7p{$cF!w1->kmQ4}xv4CzH#epUsN+2&(tk*M znpl$*h;AJ29G+IY@yxVpN;SqV@zi{@hsb`mDvp6Y_tzKC(%cav%2fu^NPn1NX;?o& z{ubs5$4P5NMHnAE0$Y|m#Y{D}dcUD~8Cnoe2pT^{p2D8)o(8HwY_*8mth&X&c2rcrEW`4|OfyYc2$uy~l1dd69V-W@Xj#kwbkFp)LvT#euSK z@>O9bVaJ8owoK>Z$8%*%Iw!^j~c`d?WWLeRdz0fG_iuHhQ<$ON>h>(yXKyYK=S!dbM#%f< z9Y^OsK|J54AREchI{$7Ntkx`qOx-PzYGBExC3)wZV^lDnl4WrOv;^45hdYCZ%hRG? zTB$w~JiSEMC5*5vT0K$=)nFO}%sA4XSk0s(=K!OE&nabTAT79(+fB|Uh-Oz%)SB7B zhm2I-riWms;=KF3M2^Fv`07oJ)!*~T!>FL`QfWoE$jRdeauCD#8RJ6vywIp}^-_#N zfaSr!>FJ%g>V7HUZR9E5W?l8rNIdQ$qh|4P+N^SuERAwGUO`q zZY8dACIgQa@_N!pgVy(8yI-w=$s;qXkuCO#l9tfweO>79NjfU{irzz@*|}Kx(AKsf zWZbLE{Ms@TY*wAY39LUsLh~gZjx#D$oi&ya06aQHEv^z0I#0PDk2H%Y!Y8jL1<4{O zsJb}Gzl#YaiqV3nEUFY_KU2d#7poMHJ-TGMXy3`8y!`O9NSMd4#;FEFA#Ask z9YGu-+gD&-SZyn>&)E6RTs8l>QGA&NHf5rY`S8DE+9m^>=9rm))0`#Yqq?F4Ak=I- z`WqL8G%Te==mJr6bMh6_;6Um~GskmTY)c|s4V-NVmicOqxm$%= z&IMrc4p;k{RUC(!8O{DEa#F|y&*v2xCuun= zlO6X$8vnR-^E*9EEo(XK=@a0u{&de})AaK85(4&c86G{4be>+PO7y*|`u@_}&WZQ= zoD@bI^sx%mRm#nJGeskwI$#SdvYut2>d_qckLI{l9L2buQRQ@wJI&U9_=$?2KoQ0k zLRBYbmeP;AY|L^u8QC+_vW0+^qpS@-H12Su{h_KuxZ?F&j$!kfXSST!Pq zAeJ)NqRqQux!KTQTR1&^j9z%UYZ-Ae%fYbBx=ik8pQbXhFk!%h7=Z}DT={c!LQqfYe~lff0rb? za4|aepLq)g0ZQ)^O!n8efGGd-NVCdLSJhcczy=7ne}&yx<8T0y#$U7ZgsMSx12^1d zNni;GKGh!bVUZy!V`ca}u|-$=(8b%AZZYV5UvQOzY6o)gO3gp-rVX6bizwfXV<2X6 zCxfHZHYzGa-h*RT`oNaMM)ga?nLjwS=}l`TX9}ey=bJQ|zXdoe)5i+pSroT(P;|sG z_VP3J!I>G&om0!chx!HL*9_>$+~qZ?L<0N-UfLN5*$LSpP{>DJ42Ze9nS7$X56IRk zgHs+Ks+o>Dg-Vd-b<{{XK~fx9w6qT}G1_$4iIqP*ADE`{nj~1^aRaZ`;1w`)UUH00 z*$xCU28cTsf|i$P52dB?I$|hY5PJoG!!M@HsBP*N^!9K>3!x%;F3fMdFU0J=GXNIe z*H+VWi8nVxodz>7?EEjS_~FKBhgy+`PhkQP`E^Ew$MHWm4(B92*s7$C1ZW&c_MYv{ z>r}7IWFxyAF^(*Rr_3~J>5OAjA|b5)tpy_IBxTtG`sZBys)|IEf+7nB6j2AQP%M`c zb;>BEggkz1gKbe8pS%VyQjek;OeWB^SQPYf&2ZDANbe;bvj$aEb7SUyB?8ZM{Yf_7 zGV(W?y*|{6cOg2yxZqg<%M#*%mJ&4^nUU<2dV10l%AE5#K9o8`GeaV!YcNuQ7Ru!` zH=W<(xbtOrhuRc3PE@}_V5p_q>}wVDz}KRDL1tHu1Lo>-k)!LoRQXGt&j(gm@O^<(SodvM*}+)x}}ih zKT0h8%GW|1^UM z%`w4r=>*FWu;c!3X+2T#Qx<6hqiFS6L2Rc{nTfINw>zn70LysKlaMwHNDt=)&Hu1? z^#cIs5Y5$@6wgS0Nj1|;TxLcn@%E=<8!*BhSCE)CJS<6q9AjLnUReB!OLX|-Jb74P zlfv{1M9=_@6%S2)&ghJ3Rv1sR&y(cDb`TccLFwokWT!)eAcbxA?uZ+A_%fT;6V*H& zlA;PnDJAO2$R5?tB}_i3@uz-GYjSu&0q{TCycqk0an*1mD*AGw>5uA9UT}(pdQ=dS zVi5JWfMQeC^NnYVMHprkFu+tPG$D3L>L#yO%-(Bx8C78nusogYawiPO?jv;w!qWAP ztJ*S+*M#V3MrutgTtbvC(hS)tB2K6+{U@G;{P_q@+qcg`H_mw_u33%F8)AW_h!Jf= zY6(lDKSk9?V0zO;*4m^W%H=LwjVB1|PFZ~+W)a!=X*E!UUWV+v5bU>Cq}wxB+%(KX zyef?L3?D7y-d|KbiUJg?`rwAT*g)cwfUOBZC5iri8qmBlGKb8S^_c;;3C-_XOq6#-xMpbkep)(+=uSFD6H;H4eP zs_P@KanzDliauM~k;aP4N5`!7w(vv0x0R_Sb1+TQ(AjdN83XK3zjK2c^>V7pYLD{` zIJbPY0mgiD*@X4Q{K6%&yIZ;+!H@3RVSZ~g8K+%;>;cY93K}UmwUCp`&g%-m7)*4S zcA!8qE}v_4;pUSeZNBf5DZM{_vpz0+{{5hhkUE6Q|-6nG$bRFZIHG2rVc_60>tiBhoz zqnn@$gLvmy5){PHAV`$0F_hFn;~d)rn2F2`o+dUs)o3+LH?L%@otwN?BQm|v=1bfP z>%<;=+d%e`#3DqgMehD_k=KlHb%T1PlLDarGBc|GYF%4mg0&H`0~5$R?B{hPm07xW zGr$q202^G>STA(M?^iu9bFb{!Y)McSH@ni7bs>b4{viL3FU+{F?KASMst)c@ic#Im zHwtv*z6MQEE6g}A^2RewbhEMIMQpqSsJEHZ4w$GszV^mtR|0k`u!a6dtB<3|Cc<=P zoS6xC8^asz%gsx94Fc+-{t72ZZ`^uNPP1mekiKO@Aw99nZ&?>zTg!VU0qbL=oH4Ufbj+wm}PH7AyPl-mrWur^SGujUp9^XbnzUPP3`-F(Qt5;w3t@?qRnU5*}wp^wJ@VNm7ejDR=7IimISitCI@(op`>?oS2k!H!u}u z=0;;IiT}&vz8}u8G74QzmOI~rB$H%aWz*g5Htt5^FpTv?XvPa ztuJkU8GocH^Ub4kYH13HhMXaCh#+Pi5p>N%1QHsala_0&$U#rX9i7 z-)2?x_q8}z*;nfv>q}>e>7$ga!?u%YxccdOr3aq@F_cARy|>a_WD*esh_iE#^kTJ8 zi{k22pBId(<6zrF>`sW=S=v_D(FPE?>ZPTE{;w zt7X}?R_sK{NI3r{ z%dCCk!75|)1dG4vdu9I&g6h4SOogZc9znZ`M3AL?oJ>0RENpxZ2mh01jWdGyMF=Mo}`VdBSSb}!BP+z$Kc{2(AlAg2ueQuDzf&(s0DKxKx` zpQv7&VP9pOEpX+cPLfde!^lGe*6Jm?gPf1^E!5$?WN}aXQ8bRe+dWSg!J$|_;}Net z44@aSklR*G9pQ8?Q%`;)`Ja?M%^`AWf54X)@$`(`%T=aT9^EwLgGa2waR-jeK|}BO z^lNL1H0N&F#6}M7=h(e~8L^1kDeRlPVnzW729`>{XXYDV?F$;dX)+Xe6zrhq1GX|6 z3)XrK*97rRdV8q;iJNjvhlrljn;Mo{fO-6|=E}{@P)* z%TUL=DaTklz~e2^Doqo*;s2M=b7ebfkfPJA@vARP;AiP#;L#(~?)V!4{JIri>y(2| znSK`ZDKRKWyk}QK`9ke?6v!L}b#dhP;0KxnL zFCgh2bmX?;x~8;0?r~jrKJQa^YWO!b&ofHpA3^c~Wjd0~p=2K>JpzKsn3PP0iTdmc zj;9G|z4TRnU~VnVF`Z{lM|Iq#DDfaQQDcwnT$T^C;@g~Z0PD91HjZ$8$z2ck9By`p zIt$`ofQnR?u>bt~!sLX`R>`*?Dat=P+|_=;VtD&lIVh(#a1zybezX`C3f*W*4!obY z>IGY!VmkmqCvUKhz;t9wGG`q$`+4;U48f=RyOcE^_xO*pb!4hcilO7%Z0}zG0+vQy z0>Y=X!DFZtw%cS{uwSHo^zC;zvWx>#LZg|R z7ped+kBZDvj*>{yMc0ZJqp=O3Um>C;rc8tFF(R~Dr5q6)U5y((O4TvilN!I6+C*f@g0uMt&5 zkFTR=G@o?Sams`Rxd;!N6vFY>zCY$g@^1gxDhqcL)s%gg09gD)M`~lVSM)3U7&owm ztv89tmLeGWI;&$PRAGGz741XAH(J9<`2r3ehbf_gT>n5S{i69nS+O4#+pm|uPZFhB zCb0up7>d6xL-E$Fe5JKNiZFxkcgponF?kLWz`c?P;hf3V>_-$oJ`RLs z_QIJwgSQWhq6VxA@nv4l3A(!^E0v$F2gl$lJ8 zYeRNlowF=nvTfKy9q^>$1#zb9fG23eMUUDI+jfB&Yo6Q`E;iT*x3ZVdZR2h!NV|_N zQh0P=98e&kK`fu+T~9;{ng*yppCoJcjad4Yi<6;YXH;knO`Vz>DGcb%m2R5oN&`fXg|sT&d7} z`epAazw&`m*c0+VI!K13Ch;=JS-HEkGZjSEMSbN4OEKquO&-Qx*d({9>ZxA~d|AOB z*CM{AG1(Eq!}zpfIh@c_x`Q$K&el9Yl58pj$h7@&=I^v`9Gkg5|1Oet$9^E}#2K5! zBWeg;rz!xjD5jCC#`uTlrdZ!69C>}^MBU5mtz?BkPi~hBWpB4iq4b6?I`B&pJjkhn z?KCii)#ft53h|&P5jB!s@Tii@MOD&$yj~HNo;zJlMxd*yKGX+8pity2$j2vl=SD78 zo)`-}T_`Of(rH}(Rh{C_zj;Q=;OIoAN%(Q68W2KX+N-LuU=L?Wyi7+bFZCAcV7Jxv zxBeeqocO5^Rg(!Hc`k(~85&BB<5xk|QDzF(PeYk}B6rG-!czOy@cRPyCaoHljlYxY z1o=K*;#AIh{iI1;1zn9~rrp3cO~=!GW^l;0Aic zoYLOqDnzxoE6dX%Z(~H+GJlF$4UWsM_ciDdQw~T&34G(|Im=7mfzFBnQh1^Wb=H86 z4-A;?($94=A2-V}9X&}9p2@kdUczg@kmW~JH%61A4eU8>o!&sRA-3Xh<6_|(>E#I; zpoZRhroyOIc`7Xdno?=S%2|y^ry2{%(KhyT2=HndAbg5oDd*HJ93EN$f@e?!jPXJ9|J=w9W-iby3_1;}BS<%%&$cz!arKi*aCu`W8#Nzoe1 ziU4#3=_$`mmI@We@2qTim)jKwoKLZ^{3M=7{~;vd&l|b;#w)z`%}=#o{zF3}zh;Ry z(T1$q^ThY)gNC6?)id)h6^-X?3z-$@q2;ZwTZ{!b`>!8r*;{pd6WKc8-1H0IVV%f6 z(T}Tx&-YIK_|-Qu;z!+_o0}Nai>P_NsY5(+ejl_xF&M&JVSHWKP`)%jM;&IC(?&4R zuTa|0<+$dqNBFBDW_mvt@%1hJE7bPh4{lr6me5l@dQmQsi>q@>Z7Zur2aY|Qbka!1 z)ISSjKGZE9d^5`tnQqHmm>;Qkj@%gEx84{MGC#c8x=N7Rnw##LfKK@^x1KS#0)DLB zfgsxYmCf(dBUC7IMJgn_%$NBCLNnLK$LO0~QofoqPno}#Li{4bcIz$Rj=h+TGjA!G zWilV@tgfR*>ep8zI{l#M&zP;NMr#b_j<)&JrEH95^ukKXvDiNGMH_f-!&HmezO4L7$Pv3 zyWd4bfFC|k?V?`*RyEYe`~Pq0cb$Sg|8aLB3b;z`gmGz(s*V96jBvnULjSS(i)iI4 Xy<_wHu>JQIrHOZ4l{sZG+m8POY3j!) delta 20857 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 t-ZRbwgK_;~6UK+l Dict[str, float]: y_hat = list(self.model.predict_in_sample(start=d, end=len(self.df))) else: - y_hat = list(self.predict(self.df[self.x_var])[self.y_var].values) + exog = self.df[self.x_var] + y_hat = list(self.model.predict(n_periods=len(exog), X=exog)) model_summary = {"rsq": np.round(metrics.rsq(y, y_hat), 3), "mae": np.round(metrics.mae(y, y_hat), 3), "mape": np.round(metrics.mape(y, y_hat), 3), @@ -251,5 +252,5 @@ def predict(self, df_pred = pd.concat([df_pred, x_predict.reset_index(drop=True)], axis=1, ignore_index=True) - df_pred.columns = list(self.y_var) + self.x_var + df_pred.columns = [self.y_var] + self.x_var return df_pred diff --git a/requirements.txt b/requirements.txt index 0fb8a4c..cf109e0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ pandas==1.0.1 -statsmodels==0.11.0 xlrd==1.2.0 -numpy==1.18.1 +PuLP==1.6.8 pmdarima==1.8.0 -xgboost==1.5.0 +numpy==1.18.1 Cython==0.29.15 -PuLP==1.6.8 +statsmodels==0.11.0 +xgboost==1.5.0 scikit_learn==1.0.2 diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index e46fbfe..35964f6 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -69,11 +69,17 @@ def test_multivariate(self): df_ip = pd.read_excel(path + "test_time_series.xlsx", sheet_name="exog") df_ip = df_ip.set_index("ts") - mod = AutoArima(df=df_ip, y_var="y", x_var=["cost"]) - op = mod.metrics + y_var = "y" + x_var = ["cost"] + mod = AutoArima(df=df_ip, y_var=y_var, x_var=x_var) + metrics = mod.metrics + X = pd.DataFrame(df_ip.iloc[-1]).T + op = mod.predict(x_predict=X[x_var])[y_var][0] + exp_op = X[y_var][0] self.assertEqual(mod.opt_params["order"], (0, 1, 1)) - self.assertAlmostEqual(1.0, op["rsq"], places=1) - self.assertLessEqual(op["mape"], 0.1) + self.assertAlmostEqual(1.0, metrics["rsq"], places=1) + self.assertLessEqual(metrics["mape"], 0.1) + self.assertAlmostEqual(op, exp_op, places=0) def test_univariate(self): """TimeSeries: Test for univariate"""