scipy.signal.decimate vs array operations
You should use the 'full' parameter for the convolution. Then, naturally with the convolution, your peak that you use for decimation occurs at the end of each symbol. At this point, the transmit and receive filter line up and you get the maximum overlap and hence best SNR.
The decimate function applies a low-pass filter before the decimation. This is due to the sampling theorem: When you reduce the sampling rate, you need to remove higher frequencies to prevent aliasing. However, in your case, you have already convolved with your filter, so the simple version of taking only every n-th sample is perfectly correct.