Skip to content

Instantly share code, notes, and snippets.

@kantale
Created March 31, 2018 11:04
Show Gist options
  • Save kantale/8a47b4797f5bd83fede251ade22b8b29 to your computer and use it in GitHub Desktop.
Save kantale/8a47b4797f5bd83fede251ade22b8b29 to your computer and use it in GitHub Desktop.
Άσκηση
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Άσκηση\n",
"\n",
"Σε ένα υποθετικό τμήμα πληροφορικής κάποιας σχολής, οι φοιτητές διαλέγουν μεταξυ δύο διαφορετικών τμημάτων για να παρακολουθήσουν το εργαστήριο κάποιου μαθήματος. Οι φοιτητές μπορούν να διελέξουν οποιοδίποτε από τα δύο τμήματα θέλουν. Το ένα τμήμα έχει μάθημα κάθε Δευτέρα 16:00 με 18:00 και το παρακαλουθούν 8 φοιτητές. Το δεύτερο εργαστήριο γίνεται κάθε Τρίτη 18:00 με 20:00 και το παρακολουθούν 12 φοιτητές. \n",
"\n",
"Ο καθηγητής του τμήματος ανησυχεί ότι επειδή το τμήμα της Τρίτης είναι πιο αργά, οι φοιτητές που παρακολουθούν το μάθημα, θα είναι πιο κουρασμένοι και έτσι δεν θα έχουν τις ίδιες επιδόσεις με τους φοιτητές που παίρνουν το τμήμα της Δευτέρας. \n",
"\n",
"Στη μέση του εξαμήνου το μάθημα έχει πρόοδο. Όλοι οι φοιτητές εξετάζονται στα ίδια θέματα, την ίδια ώρα. Στον παρακάτω πίνακα φαίνονται οι βαθμοί των φοιτητών του πρώτου (Δευτέρα 16:00-18:00) τμήματος:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"grades_first = [84, 72, 57, 46, 63, 76, 99, 91]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Στον παρακάτω πίνακα φαίνονται οι βαθμοί των φοιτητών του δεύτερου τμήματος:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"grades_second = [81, 69, 74, 61, 56, 87, 69, 65, 66, 44, 62, 69]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Αρχικά ο καθηγητής συγκρίνει τον μέσο όρο των τμημάτων:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def average(grades):\n",
" return sum(grades)/len(grades)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1st: 73.5 2nd:66.91666666666667 difference:6.583333333333329\n"
]
}
],
"source": [
"average_first = average(grades_first)\n",
"average_second = average(grades_second)\n",
"difference = average_first - average_second\n",
"\n",
"print ('1st: {} 2nd:{} difference:{}'.format(average_first, average_second, difference))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Με τρόμο, ανακαλύπτει ότι οι φοιτητές του πρώτου τμήματος είχαν κατά μέσο όρο 6.6 καλύτερο βαθμό! Πριν εισηγηθεί στον πρόεδρο του τμήματος την αλλαγή του ωραρίου των μαθημάτων καλεί εσάς να ελέγξετε αν το δεδομένα δείχνουν ότι υπάρχει όντως κάποια διαφορά μεταξύ των βαθμών του πρώτου και δεύτερου τμήματος. \n",
"\n",
"Ο τρόπος που πρέπει να αντιμετωπίσετε αυτό το πρόβληματα είναι ο εξής. Αρχικά υποθέτουμε ότι οι ώρες των μαθημάτων δεν επηρεάζουν τις αποδόσεις των φοιτητών και ότι η διαφορά στον μέσο όρο που βρήκαμε εμφανίστηκε τυχαία. Σκέφτεσται ότι αν όντως ισχύει αυτό, τότε αυτή η διαφορά (6.6 ή ακόμα μεγαλύτερη) θα πρέπει να εμφανίζεται αρκετές φορές κατά τύχη. Δηλαδή αν αναδιανείμετε τους φοιτητές τυχαία μεταξύ των δύο τμημάτων (διατηρώντας όμως τον αριθμό των φοιτητών σε κάθε τμήμα σε 8 και 12) και τότε μετρήσετε τον μέσο όρο ξεχωριστά σε κάθε τμήμα, τότε, αν η διαφορά 6.6 (η μεγαλύτερη) εμφανίζεται σε πάνω από το 5% των αναδιανομών, βγάζουμε το συμπέρασμα ότι όντως οι ώρες των μαθημάτων δεν επηρεάζουν την απόδοση. Αν όμως αυτή η διαφορά (>=6.6) εμφανίζεται κατά τύχη σε λιγότερο από το 5% των αναδιανομών, τότε βγάζουμε το συμπέρασμα ότι όντως το ένα τμήμα είναι καλύτερο από το άλλο. \n",
"\n",
"Κάντε λοιπόν αυτή την αναδιανομή 1.000.000 φορές. Για κάθε αναδιανομή πάρτε τους φοιτητές και βάλτε τους τυχαία στα δύο τμήματα έτσι ώστε το ένα να έχει πάντα 8 μαθητές και το άλλο να έχει 12. Πάρτε τον μέσο όρο των βαθμολογιών που πέτυχαν στο τεστ οι φοιτητές που \"μπήκαν\" στο πρώτο τμήμα. Στη συνέχεια κάντε το ίδιο για τους φοιτητές που \"μπήκαν\" στο 2ο τμήμα. Υπολογίστε τη διαφορά των μέσων όρων. Μετρήστε πόσες φορές (από τις 1.000.000) ο μέσος όρος ήταν μεγαλύτερος ή ίσος από το 6.6. Τέλος, υπολογίστε το ποσοστό των φορών που η διαφορά του μέσου όρου ήταν όντως μεγαλύτερη από το 6.6. Αν αυτό το ποσοστό είναι μεγαλύτερο από 5% τότε θα πρέπει να τυπώσετε: \"ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΑΛΛΑΞΟΥΝ ΟΙ ΩΡΕΣ!\" αλλιώς θα πρέπει να τυπώσετε \"ΑΔΙΚΙΑ! ΠΡΕΠΕ ΝΑ ΑΛΛΑΞΟΥΝ ΟΙ ΩΡΕΣ!\"\n",
"\n",
"Δίνεται η παρακάτω συνάρτηση η οποία \"ανακατεύει\" τυχαία τα περιεχόμενα ενός πίνακα:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[5, 9, 2, 3, 10, 8, 7, 1, 6, 4]\n"
]
}
],
"source": [
"import random\n",
"\n",
"a = [1,2,3,4,5,6,7,8,9,10]\n",
"random.shuffle(a)\n",
"print (a)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Σημειώσεις\n",
"* Στη πραγματικότητα αυτό που θα κάνεται λέγεται \"significance testing\"\n",
"* Η φράση: \"Αρχικά υποθέτουμε ότι οι ώρες των μαθημάτων δεν επηρεάζουν τις αποδόσεις των φοιτητών και ότι η διαφορά στον μέσο όρο που βρήκαμε εμφανίστηκε τυχαία\" ονόμαζεται null hypothesis.\n",
"* Το 5% ονομάζεται \"level of significance\"\n",
"* Το ποσοστό που θα βγάλεται ονομάζεται \"p-value\"\n",
"* Αυτό το πρόβλημα εμφανίζεται πάρα πολύ συχνά στην έρευνα. π.χ. φανταστείτε ότι το \"τμημα 1\" είναι τα άτομα στα οποία δίνουμε ένα φάρμακο και το τμήμα 2 είναι τα άτομα στα οποία δίνουμε ένα placebo και θέλουμε να ελέγξουμε άν το φάρμα είχε κάποια πραγματική επίδραση (βαθμοί).\n",
"* Μπορείτε να βρείτε το ποσοστό και κατευθείαν (BONUS !). Το πείραμα αυτό είναι το t-test for mean difference. Η βιλβλιοθήκη scipy της python έχει συνάρτηση που το υπολογίζει."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [Root]",
"language": "python",
"name": "Python [Root]"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment