<p>Ok, so judging from your plot: it's the nature of the data, the price doesn't really change that often. </p>

<p>Try subsampling your original data a bit (perhaps by a factor of 5, just look at the data), so that you generally see a price movement with every time-tick. This should make any modeling much <strong>MUCH</strong> easier.</p>

<p>For the subsampling: I suggest you do simple regular downsampling in time domain. So if you have price data with a second resolution (i.e. one price tag every second), then simply take every fifth datapoint. Then proceed as you usually do, specifically, compute the log-increase in the price from this subsampled data. Remember that whatever you do, it must be reproducible during the test time.</p>

<p>If that is not an option for you for whatever reasons, have a look at something that can handle multiple time scales, e.g. <a href="https://arxiv.org/abs/1609.03499" rel="nofollow noreferrer">WaveNet</a> or <a href="https://arxiv.org/abs/1402.3511" rel="nofollow noreferrer">Clockwork RNN</a>.</p>
Deal with excessive number of zeros
<pre><code>ipdb&gt; np.count_nonzero(test==0) / len(ytrue) * 100                                                                                          
76.44815766923736
</code></pre>

<p>I have a datafile counting <code>24000</code> prices where I use them for a time series forecasting problem. Instead of trying predicting the price, I tried to predict log-return, i.e. <code>log(P_t/P_P{t-1})</code>. I have applied the log-return over the prices as well as all the features. The prediction are not bad, but the trend tend to predict zero. As you can see above, <code>~76%</code> of the data are zeros. </p>

<p>Now the idea is probably to "look up for a zero-inflated estimator : first predict whether it's gonna be a zero; if not, predict the value". </p>

<p>In details, what is the perfect way to deal with excessive number of zeros? How zero-inflated estimator can help me with that? Be aware originally I am not probabilist.</p>

<p><strong>P.S.</strong> I am working trying to predict the log-return where the units are "seconds" for High-Frequency Trading study. Be aware that it is a regression problem (not a classification problem).</p>

<p><strong>Update</strong></p>

<p><a href="https://i.stack.imgur.com/vIo34.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/vIo34.png" alt="enter image description here"></a></p>

<p>That picture is probably the best prediction I have on the log-return, i.e <code>log(P_t/P_{t-1})</code>. Although it is not bad, the remaining predictions tend to predict zero. As you can see in the above question, there is too many zeros. I have probably the same problem inside the features as I take the log-return on the features as well, i.e. if <code>F</code> is a particular feature, then I apply <code>log(F_t/F_{t-1})</code>.</p>

<p>Here is a one day data, <a href="https://drive.google.com/file/d/1Mk5peBhHlluludUXynAQCW8NAQllbNpA/view?usp=sharing" rel="nofollow noreferrer">log_return_with_features.pkl</a>, with shape <code>(23369, 30, 161)</code>. Sorry, but I cannot tell what are the features. As I apply log(F_t/F_{t-1}) on all the features and on the target (i.e. the price), then be aware I added 1e-8 to all the features before applying the log-return operation to avoid division by 0.</p>