## 3 Materials and Methods
### Prediction Model  
The same deep learning classifier or prediction model was used for all the machine learning approaches in order to compare them. We selected a bidirectional long short-term memory (BiLSTM) neural network (Figure 12), which allowed us to capture dependencies and patterns in sequential data. We used this specific classifier because it gave the best results when comparing other classification models in previous work [28].  
\begin{table}
\begin{tabular}{c c} \hline \hline
**Variable Name** & **Description** \\ \hline discussions\_viewed & Number of discussions the student has seen \\ htm\_completed & Number of HTML pages completed \\ vid\_completed & Number of completed video views \\ exa\_completed & Number of examinations completed \\ autoex\_completed & Number of self-assessments completed \\ n\_posts & Number of posts or messages viewed \\ n\_discussions & Number of discussions held in the period \\ assignment\_submited & Number of tasks performed \\ com\_tutor & Number of times connected to the tutor \\ Hours in course & Number of hours spent \\ Course visits & Number of visits to the course \\ \hline \hline \end{tabular}
\end{table}
Table 1: Description of student interaction data.  
Figure 11: Students and label distribution in each entity’s dataset.  
In this type of neural network, there is a bidirectional LSTM [29] layer that is responsible for learning and representing complex patterns and dependencies within the input sequence. As Figure 12 shows, it contains a variable number of LSTM units, which have internal memory cells to store and update information over time. These memory cells enable the network to capture long-term dependencies and retain important information throughout the sequence. In our research, the input data from the different weeks of the course (top side of Figure 12) were fed into a 128-neuron BiLSTM layer with 128 LSTM forward neurons and 128 LSTM backward neurons. The bidirectional nature of the BiLSTM enables the network to use information from both past and future contexts, enhancing its ability to understand the temporal dynamics of the data. The output of the BiLSTM layer is then passed to the final output layer. In our case, this output layer consisted of a single neuron with a sigmoid activation function. The sigmoid activation function ensures that the output is bounded between 0 and 1, representing a probability of our binary classification problem, 0 for nondropout, and 1 representing dropout.  
Deep neural networks are represented by a number of connecting weights between the layers. During the training process, these weights are adjusted in order to minimize the error of the expected output. The parameters of the BiLSTM layer and the output layer were updated using the Adam optimizer, which adjusts the weights of the neurons based on the gradient of a loss function.  
We used binary cross-entropy as the loss function, which measures the dissimilarity between the predicted outputs and the true target values for binary classification tasks. The BiLSTM algorithm was implemented in Python using the libraries: scickit-learn, tensorflow, and keras. We set class weights to solve the problem of class imbalance. More specifically, we set a higher weight to the minority class by using the compute_class_weight function from the sckikit-learn library.