Your scheme works, but there is no need to have $r_p$.
If you remove $r_p$, then it's important to agree in advance what the bit length of your blinding factor $r_s$ will be, so that the commitment is not malleable by deciding to remove or add bits to the start of $T$ while adding or removing bits to what you later claim to be the value of your blinding factor $r_s$.
Alice then sends $hash(r_s \mathbin\| T)$ (where $\mathbin\|$ means concatenation), and later reveals $r_s$ and $T$. Just use any cryptographically secure hash that has a security level of at least 128 bits, such as SHA256. Use at least 128 bits for $r_s$ and make sure it's uniformly random, in order to prevent Bob from brute-forcing values of $r_s$ to discover your prediction in advance.
You may be additionally concerned about Bob being able to make derivatives of Alice's commitment, which is possible if the hash is vulnerable to length-extension attacks.
The scenario is: Alice commits to a prediction and announces the commitment, then Bob immediately announces a length-extension-attack-based commitment where something is appended to Alice's prediction. Bob can't open his commitment until Alice opens hers by revealing the blinding factor. The appearance of a duplicate blinding factor will be suspicious, but only if someone is paying attention.
You can avoid both this threat and avoid the need to agree the blinding factor bit length in advance by using one of the following methods:
Calculate the commitment as hash(hash(blinding factor) $\mathbin\|$ hash(prediction)).
As @kelalaka points out, use HMAC, with the blinding factor as the key. Therefore commitment = HMAC-SHA256(blinding factor, prediction).