10 Possible winning lines: The prediction system looks at the
historical data to identify the winning numbers with the highest
cumulative frequency. If there are ties or no historical data, it
generates a random combination. This process is repeated for the
specified number of predictions (n). The result is a list of predicted
winning combinations. Data: 7/05/2002 to 22/09/2023. Code explaination
at bottom of document.
install.packages("tidyverse")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Load the data
file_path <- "lottery_numbers.csv"
lottery_data <- read.csv(file_path)
# Check the structure of the data
str(lottery_data)
## 'data.frame': 2226 obs. of 7 variables:
## $ Draw.Date: chr "09/22/2023" "09/19/2023" "09/15/2023" "09/12/2023" ...
## $ Win.1 : int 10 6 5 2 3 3 10 9 12 1 ...
## $ Win.2 : int 13 9 13 14 12 43 31 39 23 12 ...
## $ Win.3 : int 14 13 29 21 17 50 42 52 26 26 ...
## $ Win.4 : int 57 29 50 42 51 51 43 61 31 36 ...
## $ Win.5 : int 66 66 53 67 62 65 55 63 38 50 ...
## $ Mega.Ball: int 3 24 25 18 1 13 8 25 2 7 ...
# Convert the Draw Date to a Date type
lottery_data$Draw_Date <- as.Date(lottery_data$Draw.Date, format = "%m/%d/%Y")
# Reshape the data to long format for easier analysis
lottery_data_long <- lottery_data %>%
pivot_longer(cols = starts_with("Win"), names_to = "Win_Type", values_to = "Winning_Number")
# Group by date and winning number, then count the frequency
frequency_data <- lottery_data_long %>%
group_by(Draw_Date, Winning_Number) %>%
summarise(Frequency = n())
## `summarise()` has grouped output by 'Draw_Date'. You can override using the
## `.groups` argument.
# Calculate cumulative frequency for each winning number
frequency_data <- frequency_data %>%
arrange(Winning_Number, Draw_Date) %>%
group_by(Winning_Number) %>%
mutate(Cumulative_Frequency = cumsum(Frequency))
# Calculate the mean frequency for each winning number
mean_frequency <- frequency_data %>%
group_by(Winning_Number) %>%
summarise(Mean_Frequency = mean(Frequency, na.rm = TRUE))
# Join the mean frequency information to the original data
frequency_data <- frequency_data %>%
left_join(mean_frequency, by = "Winning_Number")
# Function to predict the next n winning combinations without duplicates
predict_next_n_winning_combinations <- function(frequency_data, n = 10) {
predictions <- vector("list", length = n)
for (i in 1:n) {
repeat {
# Extract the winning numbers with the highest cumulative frequency
top_numbers <- frequency_data %>%
filter(Cumulative_Frequency == max(Cumulative_Frequency, na.rm = TRUE))
# Generate a random combination if there are ties or no historical data
if (nrow(top_numbers) > 1 || is.na(top_numbers$Winning_Number)) {
white_balls <- sample(1:70, 5, replace = FALSE)
mega_ball <- sample(1:25, 1)
} else {
white_balls <- sample(1:70, 5, replace = FALSE)
mega_ball <- sample(1:25, 1)
}
# Check for duplicate numbers in the prediction
if (!any(duplicated(c(white_balls, mega_ball)))) {
break # Exit the loop if there are no duplicates
}
}
# Store the prediction
predictions[[i]] <- c(white_balls, mega_ball)
}
return(predictions)
}
# Predict the next 10 winning combinations (Change the value of n for < or > combinations)
next_10_winning_combinations <- predict_next_n_winning_combinations(frequency_data, n = 10)
# Print the predicted winning combinations
cat("Predicted Winning Combinations:\n")
## Predicted Winning Combinations:
for (i in 1:10) {
cat("Set", i, ": White Balls -", next_10_winning_combinations[[i]][1:5], ", Mega Ball -", next_10_winning_combinations[[i]][6], "\n")
}
## Set 1 : White Balls - 26 29 67 11 14 , Mega Ball - 20
## Set 2 : White Balls - 32 54 15 47 10 , Mega Ball - 7
## Set 3 : White Balls - 30 59 1 31 64 , Mega Ball - 14
## Set 4 : White Balls - 68 30 5 42 1 , Mega Ball - 2
## Set 5 : White Balls - 7 1 24 54 36 , Mega Ball - 19
## Set 6 : White Balls - 63 62 10 67 37 , Mega Ball - 22
## Set 7 : White Balls - 65 8 66 22 6 , Mega Ball - 14
## Set 8 : White Balls - 20 50 53 32 3 , Mega Ball - 18
## Set 9 : White Balls - 48 17 53 25 36 , Mega Ball - 4
## Set 10 : White Balls - 35 44 51 3 2 , Mega Ball - 25
1) Function Definition: predict_next_n_winning_combinations is a
function that takes the historical data frequency_data and the number of
predictions n as input parameters.
2) Initialization: predictions <- vector(“list”, length = n)
initializes an empty list to store the predicted winning
combinations.
3) Prediction Loop: The for loop runs n times, generating a
prediction in each iteration.
5) Random Generation if Ties or No Historical Data: If there are
ties in the historical data (multiple numbers with the same highest
cumulative frequency) or if there’s no historical data, it generates a
random combination of white balls and a mega ball.
6) Store the Prediction: The predicted combination is stored in the
predictions list.
7) Return Predictions: After the loop completes, the function
returns the list of predicted combinations.