Kaggle’s Titanic Competition: Chapter 1 – Raising Anchor

Titanic

Titanic

Đây là loạt bài về dự đoán khả năng sống sót của một người trong thảm hoạ chìm tàu Titanic. Với thông tin cho trước của các hành khách, ta xây dựng mô hình dự đoán tỉ lệ sống sót của những người này. Trong phần đầu tiên, chúng ta sẽ khảo sát và phân tích sơ bộ về tập dữ liệu. Sau đó, ta sẽ xây dựng mô hình dự đoán đơn giản chỉ dựa trên thuộc tính giới tính.

Quan sát tập dữ liệu

Đầu tiên, chúng ta nạp tập dữ liệu huấn luyện (training data) và tập dữ liệu test vào R. Ta sẽ dùng training data để xây dựng mô hình dự đoán, và testing data để đánh giá độ chính xác của mô hình. Dưới đây là những phân tích sơ bộ về tập dữ liệu.

# nạp tập dữ liệu huấn luyện 
train <- read.csv("http://s3.amazonaws.com/assets.datacamp.com/course/Kaggle/train.csv")
  
# nạp tập dữ liệu test
test <- read.csv("http://s3.amazonaws.com/assets.datacamp.com/course/Kaggle/test.csv")

# kiểm tra số chiều của tập dữ liệu
dim(train)
[1] 891  12

dim(test)
[1] 418  11

# danh sách các cột thuộc tính, thuộc tính dự đoán là Survived
names(train)
 [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
 [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
[11] "Cabin"       "Embarked"
  
# quan sát 6 dòng đầu tiên của training data
head(train)
PassengerId Survived Pclass
1           1        0      3
2           2        1      1
3           3        1      3
4           4        1      1
5           5        0      3
6           6        0      3
                                                 Name    Sex Age SibSp Parch
1                             Braund, Mr. Owen Harris   male  22     1     0
2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1     0
3                              Heikkinen, Miss. Laina female  26     0     0
4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1     0
5                            Allen, Mr. William Henry   male  35     0     0
6                                    Moran, Mr. James   male  NA     0     0
            Ticket    Fare Cabin Embarked
1        A/5 21171  7.2500              S
2         PC 17599 71.2833   C85        C
3 STON/O2. 3101282  7.9250              S
4           113803 53.1000  C123        S
5           373450  8.0500              S
6           330877  8.4583              Q

# quan sát cấu trúc của tập dữ liệu
str(train)
'data.frame': 891 obs. of  12 variables:
 $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
 $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
 $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
 $ Name       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 354 273 16 555 516 625 413 577 ...
 $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
 $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
 $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
 $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
 $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
 $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
 $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
 $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...

Ta thấy training data có 891 dòng dữ liệu và testing data 418 dòng dữ liệu. Tập dữ liệu gồm danh sách 12 thuộc tính bao gồm thuộc tính phân lớp là (survived). Do đây là dữ liệu thực tế nên một số cột thuộc tính như Age có giá trị bị thiếu.

Rose và Jack, Nữ và Nam

Theo thống kê từ tập dữ liệu thu được người ta để ý rằng giới tính có ảnh hưởng lớn đến tỉ lệ sống sót của hành khách. Nghĩa là nữ giới có tỉ lệ sống sót cao hơn nam giới. Ngoài ra độ tuổi cũng ảnh hưởng đến kết quả này. Điều này cũng hợp lý vì nữ giới và trẻ em sẽ được ưu tiên tránh nạn lên thuyền cứu hộ trước. Ta có thể kiểm tra dữ liệu thống kê sau:

# so sánh tỉ lệ sống sót của hành khách
table(train$Survived)
  0   1 
549 342

# so sánh xác suất sống sót của hành khách
prop.table(table(train$Survived))
        0         1 
0.6161616 0.3838384

# so sánh tỉ lệ sống sót của hành khách nam và nữ
table(train$Sex, train$Survived)
           0   1
  female  81 233
  male   468 109

prop.table(table(train$Sex, train$Survived), 1)
                 0         1
  female 0.2579618 0.7420382
  male   0.8110919 0.1889081

# tạo cột thuộc tính mới để xác định trẻ em và người lớn
train$Child <- 10
train$Child[is.na(train$Age)] <- NA
train$Child[train$Age < 18] = 18] <- 0

# so sánh tỉ lệ sống sót của hành khách trẻ em và người lớn
table(train$Child, train$Survived)
      0   1
  0 372 229
  1  52  61

prop.table(table(train$Child, train$Survived), 1)
            0         1
  0 0.6189684 0.3810316
  1 0.4601770 0.5398230

Mô hình dự đoán đơn giản

Như vậy, ta có thể khẳng định từ tập dữ liệu huấn luyện, nữ giới có tỉ lệ sống sót trên 50% so với nam giới. Do đó, ta có thể sử dụng thông tin này trong mô hình dự đoán của mình (nếu là nữ giới thì ta dự đoán là sống sót, ngược lại là nam giới ta dự đoán là chết).

test_one <- test
test_one$Survived <- TRUE
test_one$Survived[test_one$Sex == "male"] <- 0
test_one$Survived[test_one$Sex == "female"] <- 1

Sau khi hoàn tất kết quả dự đoán, ta có thể upload kết quả. Kaggle sẽ dùng giá trị dự đoán này để đánh giá độ chính xác mô hình của bạn. Định dạng file kết quả theo mẫu sau:

"PassengerId","Survived"
892,0
893,1
894,0
895,0
896,1
897,0
898,1
899,0
900,1
901,0
902,0
903,0

# độ chính xác của mô hình trên Kaggle
0.7655510

Nguồn tham khảo: https://www.kaggle.com/c/titanic

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s