บทนำ

สวัสดีทุกคน ฉันดีใจที่ได้แจ้งให้ทราบว่าฉันได้สำเร็จภารกิจที่ 1 แล้วโดยเป็นส่วนหนึ่งของการฝึกงาน Data Science และ Business Analytics ที่มูลนิธิ Sparks ภายใต้โครงการ Graduate Rotational Internship Program

สถานการณ์

มีที่ปรึกษาที่มูลนิธิ Sparks ซึ่งคอยให้คำปรึกษาแก่นักเรียนหลายคนตลอดเส้นทางการให้คำปรึกษาของเธอ

และตอนนี้เธอได้เลื่อนตำแหน่งเป็นที่ปรึกษาอาวุโสที่ The Sparks Foundation
ควบคู่กับตอนนี้เธอต้องให้คำปรึกษานักเรียน 25 คนในชุดที่เพิ่งเข้ามาในมาตรฐานที่ 12

จากประสบการณ์การให้คำปรึกษาของเขา เธอรู้ว่านักเรียนรู้สึกตื่นเต้นมากที่ได้รู้ว่าพวกเขาจะได้รับคะแนนกี่เปอร์เซ็นต์หากพวกเขาศึกษาในระยะเวลานานขนาดนี้

ดังนั้นเขาจึงตัดสินใจให้คำตอบโดยอิงจากข้อเท็จจริงบางประการ ไม่ใช่ความคิดเห็น

การทำความเข้าใจบริบท

เธอรวบรวมข้อมูลจากนักเรียนรุ่นก่อนๆ ว่าเรียนกี่ชั่วโมงและได้กี่เปอร์เซ็นต์
แล้วเธอก็มาหาฉัน (นักศึกษาฝึกงานที่ The Sparks Foundation) เพื่อให้แบบจำลองในการทำนายคะแนนเปอร์เซ็นต์ตาม ตามจำนวนชั่วโมงเรียนของนักเรียน

หลังจากรับฟังความต้องการของพวกเขาแล้ว ฉันสามารถพูดได้อย่างชัดเจนว่าพวกเขาต้องการแบบจำลองที่สามารถทำนายค่าต่อเนื่องได้

การรวบรวมความต้องการ

ให้เราดูชุดข้อมูลของนักเรียนของเราจากชุดที่แล้ว
แต่ก่อนที่จะนำเข้าชุดข้อมูล เราต้องนำเข้าไลบรารีที่จำเป็นบางส่วนซึ่งจะใช้ในการสร้างแบบจำลอง

การนำเข้าไลบรารี

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
print("Libraries Imported Successfully")
Libraries Imported Successfully

การนำเข้าชุดข้อมูล

ตอนนี้เราจะนำเข้าชุดข้อมูลของเราซึ่งเก็บไว้ในไฟล์ CSV ชื่อ students_data.csv

df = pd.read_csv("student_data.csv") 
print("Data imported Successfully")
Data imported Successfully

การตรวจสอบชุดข้อมูล

หลังจากนำเข้าชุดข้อมูลแล้ว เราจะตรวจสอบข้อมูลของเรา โดยเราจะตรวจสอบระเบียน 5 อันดับแรกและด้านล่างของชุดข้อมูล

#Print the top 5 records of df
df.head()

#Print the bottom 5 records of df
df.tail()

เพื่อความเข้าใจที่มากขึ้น เราจะใช้วิธีการข้อมูลของ DataFrame ของ Panda ซึ่งจะให้ข้อมูลที่ครอบคลุมเกี่ยวกับหมายเลข ของคอลัมน์และแถวในชุดข้อมูลพร้อมกับประเภทข้อมูลและค่าที่ไม่ใช่ค่าว่าง ฯลฯ

dataset.info()

การตรวจสอบค่าที่หายไป

dataset.isnull().sum()

ดังนั้นเราจึงเห็นว่าชุดข้อมูลไม่มีค่า Null ดังนั้นเราจึงพร้อมที่จะแสดงภาพชุดข้อมูลของเรา

การแสดงข้อมูล

sns.set()
plt.figure(figsize=(12,6))
plt.scatter(dataset["Hours"],dataset["Scores"])
plt.title("Percentage of an student based on Study Hours",fontsize=18)
plt.xlabel("Hours",fontsize=12)
plt.ylabel("Percentage",fontsize=12)
plt.xticks(np.arange(1,10.0000001,0.5))
plt.grid()
plt.show()

หลังจากการแสดงภาพ เราจะเห็นว่ามีความสัมพันธ์เชิงบวกที่ชัดเจนระหว่างจำนวนชั่วโมงที่นักเรียนศึกษาและคะแนนเปอร์เซ็นต์

นอกจากนี้เรายังสามารถตรวจสอบความแข็งแกร่งของความสัมพันธ์ระหว่างคุณลักษณะต่างๆ (เช่น จำนวนชั่วโมงที่เรียนและคะแนนเปอร์เซ็นต์) ด้วยความช่วยเหลือของวิธีการที่ถูกต้อง

การตรวจสอบความสัมพันธ์ระหว่างคุณลักษณะต่างๆ ของชุดข้อมูล

dataset.corr()

โดยมีค่าสัมประสิทธิ์สหสัมพันธ์เท่ากับ 0.9762 ซึ่งถือเป็นความสัมพันธ์เชิงบวกระหว่างคุณลักษณะที่สูงมาก

จนกว่าเราจะเสร็จสิ้นส่วนการตรวจสอบข้อมูล และตอนนี้เราจะเปลี่ยนเกียร์ไปสู่กระบวนการสร้างแบบจำลอง

การเตรียมข้อมูล

ก่อนอื่น เราจะแบ่งชุดข้อมูลของเราออกเป็นสองส่วน ส่วนแรกเรียกว่าชุดคุณลักษณะ และอีกส่วนเรียกว่าป้ายกำกับ

การแปลง DataFrame เป็น ndarray

X = dataset.iloc[:, :-1].values   # converting DataFrame into ndarray(2D)
y = dataset.iloc[:,-1].values     # converting Series into ndarray(1D)
print(X[:5])

print(y[:5])

การแยกชุดข้อมูลออกเป็นชุดการฝึกอบรมและชุดทดสอบ

จากคุณลักษณะและป้ายกำกับเหล่านี้ เราต้องแยกสิ่งเหล่านี้ออกเป็นชุดข้อมูลการฝึกอบรมและการทดสอบ

ที่นี่ฉันจะใช้ Machine Learning Library ยอดนิยมของ scikit-learn ซึ่งสามารถจัดการงานนี้ได้อย่างง่ายดายมาก

ฉันใช้คลาส train_test_split จากโมดูล model_selection ของ sklearn และระบุข้อโต้แย้งที่เกี่ยวข้องกับขนาดการทดสอบ = 0.2 (เช่น 20% ของบันทึกที่เก็บไว้เพื่อทดสอบความแม่นยำของโมเดลสุดท้าย)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2,random_state=1)
print(X_train[:5])

print(y_train[:5])

print(X_test)

print(y_test)

การฝึกโมเดลการถดถอยเชิงเส้นอย่างง่ายในชุดการฝึก

จากการแสดงภาพด้านบน เราจะเห็นได้ว่าชุดข้อมูลมีความสัมพันธ์เชิงเส้นตรงชัดเจน นอกจากนี้ ชุดข้อมูลมีเพียงสองตัวแปรเท่านั้น ดังนั้นฉันจะสร้างแบบจำลองการถดถอยเชิงเส้นอย่างง่าย ซึ่งจะตอบสนองความต้องการของที่ปรึกษาของเราได้เป็นอย่างดี

สำหรับการฝึกอบรมโมเดลการถดถอยเชิงเส้นของเรา ฉันจะใช้คลาส LinearRegression จากโมดูล linear_model ของ Sklearn
มันจะฝึกโมเดลของเราอย่างรวดเร็ว

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train)
print("Model Trained Successfully")
Model Trained Successfully

ทำนายผลชุดทดสอบ

ตอนนี้เรากำลังมุ่งหน้าไปสู่การทำนายผลลัพธ์บางส่วนจากชุดข้อมูลการฝึกอบรมและการทดสอบ และการแสดงภาพข้อมูลเหล่านั้นบนแผนภูมิ

y_pred = regressor.predict(X_test)
y_pred

ก่อนที่จะแสดงภาพผลลัพธ์ของชุดข้อมูลการฝึกอบรมและการทดสอบ ฉันกำลังแสดงให้คุณเห็นผลลัพธ์จริงและที่คาดการณ์ของข้อมูลการทดสอบของเรา

data = pd.DataFrame({'Actual':y_test,'predicted':y_pred})
print(data)

การแสดงผลลัพธ์ชุดการฝึก

ก่อนอื่น ฉันจะเห็นภาพชุดข้อมูลการฝึกอบรมพร้อมชุดการฝึกอบรมและชุดที่คาดการณ์ไว้

เส้นสีฟ้าแสดงถึงแบบจำลอง ML ของเรา (เช่น เส้นตรง) ซึ่งคาดการณ์เปอร์เซ็นต์ที่คาดหวังตามจำนวนชั่วโมงการศึกษา ในขณะที่วงกลมกระจายสีม่วงแดงแสดงจุดข้อมูลจริง

plt.scatter(X_train,y_train, color='magenta')
plt.plot(X_train,regressor.predict(X_train), color="cyan")
plt.title('Marks Vs. Study Hours (Training Set)')
plt.xlabel("Study of hours")
plt.ylabel("Student Marks")
plt.show()

การแสดงผลลัพธ์ชุดทดสอบ

ในทำนองเดียวกัน เราสามารถเห็นภาพผลลัพธ์ของชุดทดสอบได้

plt.scatter(X_test,y_test, color='magenta')
plt.plot(X_train,regressor.predict(X_train), color="cyan")
plt.title('Marks Vs. Study Hours (Test Set)')
plt.xlabel("Study of hours")
plt.ylabel("Student Marks")
plt.show()

การประเมินแบบจำลอง

ขั้นตอนสุดท้ายคือการประเมินประสิทธิภาพของอัลกอริทึม

ขั้นตอนนี้มีความสำคัญอย่างยิ่งในการเปรียบเทียบว่าอัลกอริทึมทำงานได้ดีเพียงใดกับชุดข้อมูลใดชุดหนึ่ง
เพื่อความง่ายในที่นี้ ฉันได้เลือกเมตริกข้อผิดพลาดเฉลี่ยสัมบูรณ์แล้ว

หากคุณต้องการทราบระยะทางสัมบูรณ์เฉลี่ยของแบบจำลองเมื่อทำการทำนาย คุณสามารถใช้ MAE ได้ กล่าวอีกนัยหนึ่ง คุณต้องการทราบว่าการคาดการณ์นั้นใกล้เคียงกับแบบจำลองจริงโดยเฉลี่ยเพียงใด

เพียงจำไว้ว่าค่า MAE ที่ต่ำบ่งชี้ว่าโมเดลคาดการณ์ได้ถูกต้อง ค่า MAE ที่มากขึ้นบ่งชี้ว่าโมเดลคาดการณ์ได้ไม่ดี

from sklearn.metrics import mean_absolute_error
print("MAE",np.round(mean_absolute_error(y_test,y_pred),2))
MAE 7.88

รูปแบบสุดท้ายในการส่งมอบให้กับที่ปรึกษาอาวุโสของเรา

ในที่สุดเราก็มาถึงโมเดลสุดท้ายที่ดูดีและพร้อมที่จะส่งมอบให้กับที่ปรึกษาอาวุโสของเรา ซึ่งจะเป็นประโยชน์มากสำหรับเธอในการตอบคำถามของนักเรียน

study_hours = float(input("Enter no. of hours you want to give for your study in a day : "))
a=np.array(study_hours).reshape(-1,1)
pred = regressor.predict(a)
if a[0][0]>=8:
    ini="excellent"
    print("\nYou made an {} decision for studying {} hours in a day, then I will say you can score {} percentage of Marks.".format(ini,a[0][0],np.round(pred[0],0)))
elif a[0][0]>5 and a[0][0]<8:
    ini="average"
    print("\nYou made a {} decision for studying {} hours in a day, then I will say you can score {} percentage of Marks.".format(ini,a[0][0],np.round(pred[0],0)))
else:
    ini="poor"
    print("\nYou made a {} decision for studying {} hours in a day, then I will say you can score {} percentage of Marks."
Enter no. of hours you want to give for your study in a day : 8

You made an excellent decision for studying 8.0 hours in a day, then I will say you can score 82.0 percentage of Marks.

ขอขอบคุณที่อ่านคำอธิบายโมเดล และอย่าลังเลที่จะให้ข้อเสนอแนะอันมีค่าของคุณ เรายินดีที่จะพบคุณที่นั่น