"Baseline Model" එකක් යනු කුමක්ද? 📏
අපි ඉතා දියුණු, සංකීර්ණ ස්නායුක ජාල (Neural Network) ආකෘතියක් ගොඩනැගීමට පෙර, අපි මුලින්ම ඉතා සරල, පොදු බුද්ධියට එකඟ වන ක්රම කිහිපයක් අත්හදා බැලිය යුතුයි. මෙම සරල ආකෘති වලට අපි කියන්නේ **"මූලික ආකෘති" (Baseline Models)** කියලා.
මෙය හරියට රේස් කාර් එකක් හදනවා වගේ වැඩක්. ඔබ අධිවේගී රේස් කාර් එකක් හැදුවට පස්සේ, ඒක සාමාන්ය පවුලේ මෝටර් රථයකට වඩා වේගවත්ද කියලා පරීක්ෂා කරන්න ඕන. ඔබේ රේස් කාර් එක සාමාන්ය කාර් එකකටවත් වඩා වේගයෙන් යන්න බැරිනම්, ඔබේ නිර්මාණයේ යම්කිසි වැරැද්දක් තියෙනවා. ඒ වගේම, අපේ දියුණු AI ආකෘතිය, මේ සරල මූලික ආකෘති වලට වඩා හොඳ ප්රතිඵල ලබා දිය යුතුමයි. නැතිනම්, ඒ තරම් සංකීර්ණ ආකෘතියක් හැදීමෙන් වැඩක් නැහැ.
මෙම ඒකකයේදී අපි එවැනි සරල මූලික ආකෘති දෙකක් නිර්මාණය කරමු:
- ව්යාප්තිය-මත-පදනම් වූ ආකෘතිය (Frequency-Based Predictor): වැඩියෙන්ම ඇදී ඇති අංක තෝරා ගැනීම.
- අහඹු ආකෘතිය (Random Predictor): කිසිදු දත්තයක් නොබලා අහඹු ලෙස අංක තෝරා ගැනීම.
ආකෘතිය 1: ව්යාප්තිය-මත-පදනම් වූ අනාවැකිය (Frequency-Based)
මෙය ඉතාම සරල සහ බොහෝ දෙනෙකුට මුලින්ම සිතෙන ක්රමයයි. මෙහි තර්කය නම්: "ඉතිහාසයේ යම් අංක වැඩි වාර ගණනක් ඇදී ඇත්නම්, සමහරවිට අනාගතයේදීත් එම අංක ඇදීමේ සම්භාවිතාව වැඩි විය හැක." අපි 4 වන ඒකකයේදී කළ ව්යාප්ති විශ්ලේෂණය (frequency analysis) මත පදනම්ව මෙම ආකෘතිය ගොඩනගමු.
Jupyter Notebook එකේ පහත කේතය ක්රියාත්මක කර, වැඩියෙන්ම ඇදී ඇති අංක 5 මොනවාදැයි සොයා ගනිමු.
import pandas as pd
# දත්ත ලබා ගනිමු
df = pd.read_csv('lottery_data.csv')
# සියලුම අංක එකම ලැයිස්තුවකට දමා ගනිමු
number_cols = ['number_1', 'number_2', 'number_3', 'number_4', 'bonus']
all_numbers = df[number_cols].values.flatten()
# එක් එක් අංකය කොපමණ වාරයක් ඇත්දැයි ගණනය කරමු
frequency_counts = pd.Series(all_numbers).value_counts()
# අනාවැකි කීමට අවශ්ය අංක ගණන
NUM_TO_PREDICT = 5
# වැඩිම වාර ගණනක් ඇදී ඇති අංක (අපේ අනාවැකිය)
predicted_numbers = frequency_counts.head(NUM_TO_PREDICT).index.tolist()
print(f"ව්යාප්තිය මත පදනම් වූ අනාවැකිය (වැඩියෙන්ම ඇදී ඇති අංක {NUM_TO_PREDICT}):")
print(sorted(predicted_numbers)) # පිළිවෙළකට පෙන්වමු
අවාසි: ලොතරැයියක් සම්පූර්ණයෙන්ම අහඹු නම්, අතීත ව්යාප්තිය අනාගතයට බලපෑමක් නැත යන මූලික තර්කය මත බිඳ වැටේ. දිනුම් ඇදීම් වල අනුක්රමය (sequence) කිසිසේත්ම සලකා බලන්නේ නැත.
ආකෘතිය 2: අහඹු අනාවැකි ආකෘතිය (Random)
මෙම ආකෘතියේ තර්කය නම්: "ලොතරැයියක් යනු අහඹු ක්රියාවලියක් බැවින්, කිසිදු රටාවක් සෙවීම තේරුමක් නැත. කළ හැකි හොඳම දේ නම් අහඹු ලෙස අංක තේරීමයි." මෙම ආකෘතිය අපේ දත්ත කට්ටලය දෙස බලන්නේවත් නැත. එය හුදෙක් ලබා දී ඇති පරාසයකින් (range) අහඹු ලෙස අංක තෝරා ගනී.
Python හි `random` library එක භාවිතයෙන් මෙය නිර්මාණය කරමු.
import random
# ලොතරැයියේ තිබිය හැකි කුඩාම සහ විශාලම අංක
MIN_NUMBER = 1
MAX_NUMBER = 40 # උදාහරණයක් ලෙස
NUM_TO_PREDICT = 5
# තිබිය හැකි සියලුම අංක ලැයිස්තුවක් සාදා ගනිමු
number_pool = list(range(MIN_NUMBER, MAX_NUMBER + 1))
# එම ලැයිස්තුවෙන් එකිනෙකට වෙනස් අංක 5ක් අහඹු ලෙස තෝරා ගනිමු
random_prediction = random.sample(number_pool, NUM_TO_PREDICT)
print(f"අහඹු ලෙස තේරූ අනාවැකිය:")
print(sorted(random_prediction)) # පිළිවෙළකට පෙන්වමු
අවාසි: අප কষ্টப்பட்டு එකතු කරගත් දත්ත වලින් කිසිදු ප්රයෝජනයක් ගන්නේ නැත. මෙය හුදෙක් අනුමාන කිරීමකි.
සීමාවන් සහ ඉදිරි පියවර ➡️
දැන් අපි ඉතා සරල අනාවැකි ආකෘති දෙකක් සාදා අවසන්. නමුත් මේ දෙකෙහිම බරපතල සීමාවන් තිබෙන බව පැහැදිලියි.
- ව්යාප්ති ආකෘතිය "කුමන අංකද" යන්න ගැන පමණක් සිතුවත්, "කුමන අනුපිළිවෙලකටද" හෝ "කවදාද" යන්න ගැන සිතන්නේ නැත.
- අහඹු ආකෘතිය කිසිවක් ගැන සිතන්නේම නැත.
මෙම ආකෘති දෙකටම කළ නොහැකි, නමුත් අපේ දියුණු AI ආකෘතියට කළ හැකි විශේෂ දෙයක් තිබේ: අනුක්රමික රටා (Sequential Patterns) හඳුනා ගැනීම.
එනම්, "අවසන් දිනුම් ඇදීම් 10 තුළ ඇදී ඇති අංක මේවා නම්, 11 වන දිනුම් ඇදීමේදී පැමිණීමට වැඩි ඉඩක් ඇත්තේ කුමන අංක වලටද?" යන සංකීර්ණ ප්රශ්නයට පිළිතුරු සෙවීමට උත්සාහ කිරීමයි. අපගේ LSTM ස්නායුක ජාලය නිර්මාණය කර ඇත්තේද මෙවැනි අනුක්රමික දත්ත වලින් ඉගෙන ගැනීමටයි.
ඊළඟ ඒකකයේ සිට, අපි මෙම සරල ක්රම පසෙකලා, Machine Learning ලෝකයට පිවිස, අපගේ දත්ත ස්නායුක ජාලයකට ලබා දීමට සූදානම් කරන ආකාරය ඉගෙන ගනිමු!