RateMyProfessors gives you a number. ProfInsight gives you confidence intervals on that number, detects whether the professor is getting better or worse over time, classifies review sentiment across five teaching dimensions, predicts your likely grade, optimizes your entire semester schedule, and matches professors to your learning style. All through original statistical modeling, not LLM summarization. I implemented three Bayesian ML models from scratch in pure Python with no external ML libraries. A Beta-Binomial posterior model for confidence-aware quality ratings that accounts for sample size. A Naive Bayes classifier that categorizes reviews into lectures, grading, workload, approachability, and exams. And a Gaussian Process Regression with an RBF kernel that detects rating trends over time with uncertainty bands. The scraper hits the RateMyProfessors GraphQL API with parallel fetching, retry logic, and rate limit handling. The backend caches aggressively and refreshes all data automatically every week through GitHub Actions. Currently serving 29 universities with over 100,000 reviews.
What it does
Three Bayesian ML models implemented from scratch in pure Python, no sklearn or scipy
Beta-Binomial posteriors for confidence-aware ratings that account for sample size
Naive Bayes sentiment classifier across five teaching dimensions (lectures, grading, workload, approachability, exams)
Gaussian Process Regression with RBF kernel for rating trend detection over time
Semester optimizer that finds the best professor combination based on your preferences
Student fit quiz with Bayesian matching against all professors
Side-by-side professor comparison with radar charts
Red flag detection for declining ratings and poor reviews
Parallel scraping with ThreadPoolExecutor, exponential backoff on rate limits
Automated weekly data refresh via GitHub Actions
29 universities, 3,000+ professors, 100,000+ reviews
Tech stack