Predicting a final exam score from arbitrary set of practice exams I posed this question to math.stackexchange without response, and feel it is better suited here. I am writing an application to predict a final exam score given at least one tuple, where the tuple represents the results of a practice exam:

(score, exam_name, date_taken[optional])


Users input practice exam scores and, later, their official exam score (date required); not all users take all available practice exams. The dataset can be represented like this:

$$
\begin{bmatrix} 
a &amp; b &amp; c &amp; d &amp; e &amp; f\\
g\\
h &amp; i &amp; &amp; j\\
k &amp; l &amp; m &amp;&amp;n
\end{bmatrix}
\begin{bmatrix} 
(actual,date)\\
(actual,date)\\ 
(actual,date)\\
(null,date)
\end{bmatrix}
$$

Each row is a user. Each column in the first matrix is a particular practice exam; the second matrix is the score of the final exam (actual) and date taken. Each element in the first matrix is a tuple of the form described above.

Users complete an arbitrary combination of practice exams. The user represented by the 4th row has inputted four events (four practice exams), the date he plans to take the official exam, but not his actual score; as such, we want to provide him with a prediction.

What model(s) might be suited for this problem? 

I have a hunch that naïve Bayes might be best because of the "incompleteness" of the matrix, and because I want to provide a prediction to the user after any input of data (i.e., user inputting a single tuple with no date, (512, mcat_24), should still receive a prediction). The feature of the problem most difficult to me is the fact that not all users take all practice exams; I'm not sure how to formalize that mathematically. I am working my way through this paper1, which may help.

[1] https://arxiv.org/pdf/1508.03865.pdf
I think that the most natural way to design this problem is indeed with missing values, and of course that means using a learning algorithm which can deal with these. Additionally to NB I think decision trees (at least some implementations) can handle missing value as well.