I would suggest you try it with clustering: If you segment users based on performance levels across multiple subjects, clustering algorithms (like K-Means or Hierarchical Clustering) could create groups (e.g., high aptitude, low general knowledge) and recommend books accordingly.