Identificación de créditos riesgosos

Juan David Velásquez Henao
jdvelasq@unal.edu.co
Universidad Nacional de Colombia, Sede Medellín
Facultad de Minas
Medellín, Colombia


Haga click aquí para acceder a la última versión online.

Haga click aquí para ver la última versión online en nbviewer.


Licencia
Readme

Definición del problema real

Las entidades financieras desean mejorar sus procedimientos de aprobación de créditos con el fin de disminuir los riesgos de no pago de la deuda. El problema real consiste en poder decidir si se aprueba o no un crédito particular con base en información que puede ser fácilmente recolectada por teléfono o en la web.

Definición del problema en términos de los datos

Se tiene una muestra de 1000 observaciones. Cada registro contiene 21 variables que recopilan información tanto sobre el crédito como sobre la salud financiera del solicitante. La información fue recolectada por una firma alemana y se puede descargar de http://archive.ics.uci.edu/ml.

 Exploración


In [35]:
# carga de los datos
credit <- read.csv("data/credit.csv")

In [36]:
# verificación de los datos cargados
str(credit)


'data.frame':	1000 obs. of  21 variables:
 $ checking_balance    : Factor w/ 4 levels "< 0 DM","> 200 DM",..: 1 3 4 1 1 4 4 3 4 3 ...
 $ months_loan_duration: int  6 48 12 42 24 36 24 36 12 30 ...
 $ credit_history      : Factor w/ 5 levels "critical","delayed",..: 1 5 1 5 2 5 5 5 5 1 ...
 $ purpose             : Factor w/ 10 levels "business","car (new)",..: 8 8 5 6 2 5 6 3 8 2 ...
 $ amount              : int  1169 5951 2096 7882 4870 9055 2835 6948 3059 5234 ...
 $ savings_balance     : Factor w/ 5 levels "< 100 DM","> 1000 DM",..: 5 1 1 1 1 5 4 1 2 1 ...
 $ employment_length   : Factor w/ 5 levels "> 7 yrs","0 - 1 yrs",..: 1 3 4 4 3 3 1 3 4 5 ...
 $ installment_rate    : int  4 2 2 2 3 2 3 2 2 4 ...
 $ personal_status     : Factor w/ 4 levels "divorced male",..: 4 2 4 4 4 4 4 4 1 3 ...
 $ other_debtors       : Factor w/ 3 levels "co-applicant",..: 3 3 3 2 3 3 3 3 3 3 ...
 $ residence_history   : int  4 2 3 4 4 4 4 2 4 2 ...
 $ property            : Factor w/ 4 levels "building society savings",..: 3 3 3 1 4 4 1 2 3 2 ...
 $ age                 : int  67 22 49 45 53 35 53 35 61 28 ...
 $ installment_plan    : Factor w/ 3 levels "bank","none",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ housing             : Factor w/ 3 levels "for free","own",..: 2 2 2 1 1 1 2 3 2 2 ...
 $ existing_credits    : int  2 1 1 1 2 1 1 1 1 2 ...
 $ default             : int  1 2 1 1 2 1 1 1 1 2 ...
 $ dependents          : int  1 1 2 2 2 2 1 1 1 1 ...
 $ telephone           : Factor w/ 2 levels "none","yes": 2 1 1 1 1 2 1 2 1 1 ...
 $ foreign_worker      : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
 $ job                 : Factor w/ 4 levels "mangement self-employed",..: 2 2 4 2 2 4 2 1 4 1 ...

In [37]:
# Algunas de las columnas son numéricas y 
# las otras son factores.
# DM corresponde a Deutsche Marks
table(credit$checking_balance)


    < 0 DM   > 200 DM 1 - 200 DM    unknown 
       274         63        269        394 

In [38]:
table(credit$savings_balance)


     < 100 DM     > 1000 DM  101 - 500 DM 501 - 1000 DM       unknown 
          603            48           103            63           183 

In [39]:
# el monto del préstamo va desde 250 DM hasta 18.424 DM
summary(credit$amount)


   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    250    1366    2320    3271    3972   18424 

In [40]:
# la duración del préstamo va desde 4 hasta 72 meses
summary(credit$months_loan_duration)


   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    4.0    12.0    18.0    20.9    24.0    72.0 

In [41]:
# la columna default indica si hubo problemas 
# en el pago del préstamo (1- pago, 2- no pago)
table(credit$default)


  1   2 
700 300 

In [42]:
# la columna default indica si el crédito fue pagado o no
# 1-si, 2-no
credit$default


  1. 1
  2. 2
  3. 1
  4. 1
  5. 2
  6. 1
  7. 1
  8. 1
  9. 1
  10. 2
  11. 2
  12. 2
  13. 1
  14. 2
  15. 1
  16. 2
  17. 1
  18. 1
  19. 2
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 2
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 2
  37. 1
  38. 2
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 2
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 2
  56. 1
  57. 2
  58. 1
  59. 1
  60. 2
  61. 1
  62. 1
  63. 2
  64. 2
  65. 1
  66. 1
  67. 1
  68. 1
  69. 2
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 2
  76. 1
  77. 2
  78. 1
  79. 1
  80. 1
  81. 2
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 2
  89. 1
  90. 2
  91. 1
  92. 1
  93. 2
  94. 1
  95. 1
  96. 2
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 2
  107. 2
  108. 1
  109. 1
  110. 1
  111. 1
  112. 1
  113. 1
  114. 2
  115. 1
  116. 1
  117. 2
  118. 1
  119. 2
  120. 1
  121. 2
  122. 1
  123. 1
  124. 1
  125. 2
  126. 1
  127. 1
  128. 2
  129. 1
  130. 2
  131. 1
  132. 2
  133. 1
  134. 1
  135. 1
  136. 1
  137. 1
  138. 2
  139. 1
  140. 1
  141. 1
  142. 1
  143. 1
  144. 2
  145. 1
  146. 1
  147. 1
  148. 1
  149. 1
  150. 1
  151. 1
  152. 1
  153. 1
  154. 1
  155. 1
  156. 2
  157. 1
  158. 1
  159. 1
  160. 1
  161. 1
  162. 1
  163. 1
  164. 1
  165. 1
  166. 1
  167. 2
  168. 1
  169. 1
  170. 2
  171. 2
  172. 1
  173. 2
  174. 1
  175. 2
  176. 2
  177. 1
  178. 1
  179. 1
  180. 1
  181. 2
  182. 2
  183. 2
  184. 1
  185. 2
  186. 1
  187. 2
  188. 1
  189. 2
  190. 1
  191. 2
  192. 2
  193. 2
  194. 1
  195. 2
  196. 2
  197. 1
  198. 2
  199. 1
  200. 2
  201. 1
  202. 1
  203. 1
  204. 2
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 2
  214. 2
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 2
  228. 2
  229. 2
  230. 1
  231. 2
  232. 1
  233. 1
  234. 1
  235. 1
  236. 2
  237. 2
  238. 2
  239. 1
  240. 1
  241. 2
  242. 1
  243. 2
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 2
  251. 1
  252. 1
  253. 2
  254. 1
  255. 1
  256. 1
  257. 1
  258. 2
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 2
  267. 1
  268. 1
  269. 2
  270. 1
  271. 1
  272. 1
  273. 1
  274. 2
  275. 2
  276. 1
  277. 1
  278. 1
  279. 2
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 2
  291. 1
  292. 2
  293. 1
  294. 1
  295. 1
  296. 2
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 2
  303. 2
  304. 1
  305. 2
  306. 1
  307. 1
  308. 2
  309. 2
  310. 1
  311. 1
  312. 1
  313. 1
  314. 2
  315. 1
  316. 2
  317. 1
  318. 1
  319. 1
  320. 1
  321. 2
  322. 2
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 2
  333. 2
  334. 2
  335. 2
  336. 2
  337. 1
  338. 2
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 2
  351. 1
  352. 2
  353. 1
  354. 2
  355. 1
  356. 2
  357. 1
  358. 2
  359. 1
  360. 2
  361. 1
  362. 1
  363. 1
  364. 1
  365. 2
  366. 1
  367. 1
  368. 1
  369. 2
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 2
  376. 2
  377. 1
  378. 1
  379. 2
  380. 1
  381. 1
  382. 2
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 2
  400. 1
  401. 1
  402. 1
  403. 2
  404. 1
  405. 1
  406. 2
  407. 1
  408. 1
  409. 1
  410. 2
  411. 1
  412. 1
  413. 2
  414. 1
  415. 2
  416. 1
  417. 2
  418. 1
  419. 1
  420. 2
  421. 1
  422. 1
  423. 1
  424. 1
  425. 2
  426. 1
  427. 1
  428. 1
  429. 1
  430. 2
  431. 1
  432. 2
  433. 1
  434. 1
  435. 1
  436. 2
  437. 1
  438. 1
  439. 1
  440. 2
  441. 1
  442. 1
  443. 1
  444. 2
  445. 2
  446. 1
  447. 2
  448. 1
  449. 1
  450. 2
  451. 1
  452. 1
  453. 1
  454. 1
  455. 2
  456. 1
  457. 1
  458. 2
  459. 1
  460. 1
  461. 1
  462. 1
  463. 1
  464. 1
  465. 1
  466. 1
  467. 2
  468. 1
  469. 1
  470. 1
  471. 2
  472. 2
  473. 2
  474. 1
  475. 2
  476. 2
  477. 1
  478. 1
  479. 1
  480. 1
  481. 1
  482. 1
  483. 1
  484. 1
  485. 1
  486. 2
  487. 1
  488. 1
  489. 1
  490. 1
  491. 1
  492. 2
  493. 1
  494. 1
  495. 1
  496. 2
  497. 2
  498. 1
  499. 1
  500. 1
  501. 2
  502. 1
  503. 1
  504. 2
  505. 2
  506. 2
  507. 1
  508. 2
  509. 1
  510. 1
  511. 2
  512. 1
  513. 1
  514. 1
  515. 1
  516. 1
  517. 1
  518. 2
  519. 1
  520. 1
  521. 1
  522. 2
  523. 2
  524. 1
  525. 1
  526. 1
  527. 1
  528. 1
  529. 2
  530. 1
  531. 1
  532. 2
  533. 1
  534. 1
  535. 1
  536. 2
  537. 1
  538. 1
  539. 2
  540. 1
  541. 2
  542. 1
  543. 2
  544. 2
  545. 1
  546. 2
  547. 1
  548. 1
  549. 2
  550. 1
  551. 1
  552. 1
  553. 2
  554. 1
  555. 1
  556. 2
  557. 2
  558. 2
  559. 2
  560. 2
  561. 1
  562. 2
  563. 1
  564. 2
  565. 1
  566. 1
  567. 2
  568. 1
  569. 1
  570. 2
  571. 2
  572. 1
  573. 1
  574. 1
  575. 1
  576. 1
  577. 1
  578. 1
  579. 2
  580. 1
  581. 2
  582. 1
  583. 1
  584. 2
  585. 1
  586. 2
  587. 1
  588. 1
  589. 2
  590. 2
  591. 1
  592. 1
  593. 1
  594. 2
  595. 2
  596. 2
  597. 2
  598. 2
  599. 2
  600. 1
  601. 1
  602. 2
  603. 2
  604. 2
  605. 1
  606. 1
  607. 1
  608. 2
  609. 1
  610. 1
  611. 2
  612. 2
  613. 1
  614. 1
  615. 2
  616. 1
  617. 1
  618. 1
  619. 2
  620. 1
  621. 1
  622. 2
  623. 2
  624. 1
  625. 2
  626. 1
  627. 1
  628. 2
  629. 1
  630. 1
  631. 1
  632. 2
  633. 1
  634. 2
  635. 2
  636. 1
  637. 1
  638. 1
  639. 1
  640. 2
  641. 2
  642. 1
  643. 2
  644. 1
  645. 1
  646. 2
  647. 1
  648. 2
  649. 2
  650. 2
  651. 1
  652. 2
  653. 2
  654. 2
  655. 1
  656. 1
  657. 2
  658. 1
  659. 1
  660. 1
  661. 1
  662. 2
  663. 1
  664. 1
  665. 1
  666. 1
  667. 1
  668. 1
  669. 2
  670. 1
  671. 1
  672. 1
  673. 1
  674. 1
  675. 2
  676. 1
  677. 1
  678. 2
  679. 1
  680. 1
  681. 1
  682. 1
  683. 1
  684. 1
  685. 1
  686. 1
  687. 1
  688. 1
  689. 1
  690. 1
  691. 1
  692. 1
  693. 1
  694. 1
  695. 1
  696. 1
  697. 1
  698. 1
  699. 1
  700. 1
  701. 2
  702. 2
  703. 1
  704. 1
  705. 1
  706. 1
  707. 2
  708. 2
  709. 1
  710. 1
  711. 1
  712. 2
  713. 1
  714. 1
  715. 2
  716. 1
  717. 1
  718. 1
  719. 1
  720. 1
  721. 2
  722. 2
  723. 2
  724. 1
  725. 2
  726. 1
  727. 1
  728. 2
  729. 2
  730. 1
  731. 1
  732. 2
  733. 1
  734. 1
  735. 1
  736. 1
  737. 2
  738. 1
  739. 1
  740. 2
  741. 1
  742. 1
  743. 1
  744. 1
  745. 1
  746. 1
  747. 1
  748. 2
  749. 1
  750. 1
  751. 1
  752. 2
  753. 1
  754. 1
  755. 2
  756. 2
  757. 1
  758. 2
  759. 1
  760. 2
  761. 1
  762. 2
  763. 1
  764. 2
  765. 1
  766. 1
  767. 2
  768. 1
  769. 1
  770. 1
  771. 1
  772. 2
  773. 1
  774. 1
  775. 1
  776. 2
  777. 1
  778. 1
  779. 1
  780. 1
  781. 2
  782. 1
  783. 1
  784. 2
  785. 1
  786. 1
  787. 1
  788. 1
  789. 2
  790. 2
  791. 2
  792. 1
  793. 1
  794. 1
  795. 1
  796. 1
  797. 2
  798. 1
  799. 1
  800. 1
  801. 1
  802. 1
  803. 1
  804. 1
  805. 1
  806. 2
  807. 1
  808. 1
  809. 1
  810. 2
  811. 1
  812. 1
  813. 2
  814. 2
  815. 2
  816. 1
  817. 1
  818. 1
  819. 1
  820. 2
  821. 1
  822. 1
  823. 2
  824. 1
  825. 1
  826. 1
  827. 2
  828. 2
  829. 2
  830. 1
  831. 1
  832. 2
  833. 2
  834. 1
  835. 2
  836. 2
  837. 1
  838. 1
  839. 1
  840. 1
  841. 2
  842. 1
  843. 2
  844. 1
  845. 1
  846. 1
  847. 2
  848. 1
  849. 1
  850. 2
  851. 2
  852. 1
  853. 1
  854. 2
  855. 1
  856. 1
  857. 1
  858. 1
  859. 2
  860. 1
  861. 1
  862. 2
  863. 2
  864. 1
  865. 2
  866. 1
  867. 1
  868. 1
  869. 1
  870. 1
  871. 1
  872. 1
  873. 1
  874. 1
  875. 1
  876. 1
  877. 1
  878. 1
  879. 2
  880. 1
  881. 1
  882. 1
  883. 1
  884. 1
  885. 2
  886. 2
  887. 1
  888. 2
  889. 1
  890. 1
  891. 1
  892. 1
  893. 1
  894. 1
  895. 1
  896. 1
  897. 1
  898. 1
  899. 1
  900. 2
  901. 2
  902. 1
  903. 1
  904. 1
  905. 1
  906. 1
  907. 1
  908. 1
  909. 1
  910. 1
  911. 1
  912. 2
  913. 1
  914. 1
  915. 2
  916. 2
  917. 1
  918. 2
  919. 2
  920. 2
  921. 1
  922. 1
  923. 2
  924. 1
  925. 2
  926. 2
  927. 1
  928. 2
  929. 1
  930. 1
  931. 1
  932. 2
  933. 1
  934. 1
  935. 1
  936. 2
  937. 2
  938. 1
  939. 2
  940. 1
  941. 1
  942. 1
  943. 1
  944. 1
  945. 1
  946. 1
  947. 2
  948. 1
  949. 2
  950. 2
  951. 1
  952. 2
  953. 2
  954. 2
  955. 1
  956. 1
  957. 1
  958. 1
  959. 2
  960. 1
  961. 1
  962. 1
  963. 1
  964. 2
  965. 1
  966. 1
  967. 2
  968. 1
  969. 1
  970. 1
  971. 1
  972. 1
  973. 2
  974. 2
  975. 1
  976. 1
  977. 1
  978. 1
  979. 2
  980. 2
  981. 2
  982. 2
  983. 1
  984. 2
  985. 1
  986. 1
  987. 1
  988. 1
  989. 1
  990. 1
  991. 1
  992. 1
  993. 1
  994. 1
  995. 1
  996. 1
  997. 1
  998. 1
  999. 2
  1000. 1

In [43]:
# convierte esta variable a factores
credit$default <- factor(credit$default, labels=c("Yes", "No"))
credit$default


  1. Yes
  2. No
  3. Yes
  4. Yes
  5. No
  6. Yes
  7. Yes
  8. Yes
  9. Yes
  10. No
  11. No
  12. No
  13. Yes
  14. No
  15. Yes
  16. No
  17. Yes
  18. Yes
  19. No
  20. Yes
  21. Yes
  22. Yes
  23. Yes
  24. Yes
  25. Yes
  26. Yes
  27. Yes
  28. Yes
  29. Yes
  30. No
  31. Yes
  32. Yes
  33. Yes
  34. Yes
  35. Yes
  36. No
  37. Yes
  38. No
  39. Yes
  40. Yes
  41. Yes
  42. Yes
  43. Yes
  44. Yes
  45. No
  46. Yes
  47. Yes
  48. Yes
  49. Yes
  50. Yes
  51. Yes
  52. Yes
  53. Yes
  54. Yes
  55. No
  56. Yes
  57. No
  58. Yes
  59. Yes
  60. No
  61. Yes
  62. Yes
  63. No
  64. No
  65. Yes
  66. Yes
  67. Yes
  68. Yes
  69. No
  70. Yes
  71. Yes
  72. Yes
  73. Yes
  74. Yes
  75. No
  76. Yes
  77. No
  78. Yes
  79. Yes
  80. Yes
  81. No
  82. Yes
  83. Yes
  84. Yes
  85. Yes
  86. Yes
  87. Yes
  88. No
  89. Yes
  90. No
  91. Yes
  92. Yes
  93. No
  94. Yes
  95. Yes
  96. No
  97. Yes
  98. Yes
  99. Yes
  100. Yes
  101. Yes
  102. Yes
  103. Yes
  104. Yes
  105. Yes
  106. No
  107. No
  108. Yes
  109. Yes
  110. Yes
  111. Yes
  112. Yes
  113. Yes
  114. No
  115. Yes
  116. Yes
  117. No
  118. Yes
  119. No
  120. Yes
  121. No
  122. Yes
  123. Yes
  124. Yes
  125. No
  126. Yes
  127. Yes
  128. No
  129. Yes
  130. No
  131. Yes
  132. No
  133. Yes
  134. Yes
  135. Yes
  136. Yes
  137. Yes
  138. No
  139. Yes
  140. Yes
  141. Yes
  142. Yes
  143. Yes
  144. No
  145. Yes
  146. Yes
  147. Yes
  148. Yes
  149. Yes
  150. Yes
  151. Yes
  152. Yes
  153. Yes
  154. Yes
  155. Yes
  156. No
  157. Yes
  158. Yes
  159. Yes
  160. Yes
  161. Yes
  162. Yes
  163. Yes
  164. Yes
  165. Yes
  166. Yes
  167. No
  168. Yes
  169. Yes
  170. No
  171. No
  172. Yes
  173. No
  174. Yes
  175. No
  176. No
  177. Yes
  178. Yes
  179. Yes
  180. Yes
  181. No
  182. No
  183. No
  184. Yes
  185. No
  186. Yes
  187. No
  188. Yes
  189. No
  190. Yes
  191. No
  192. No
  193. No
  194. Yes
  195. No
  196. No
  197. Yes
  198. No
  199. Yes
  200. No
  201. Yes
  202. Yes
  203. Yes
  204. No
  205. Yes
  206. Yes
  207. Yes
  208. Yes
  209. Yes
  210. Yes
  211. Yes
  212. Yes
  213. No
  214. No
  215. Yes
  216. Yes
  217. Yes
  218. Yes
  219. Yes
  220. Yes
  221. Yes
  222. Yes
  223. Yes
  224. Yes
  225. Yes
  226. Yes
  227. No
  228. No
  229. No
  230. Yes
  231. No
  232. Yes
  233. Yes
  234. Yes
  235. Yes
  236. No
  237. No
  238. No
  239. Yes
  240. Yes
  241. No
  242. Yes
  243. No
  244. Yes
  245. Yes
  246. Yes
  247. Yes
  248. Yes
  249. Yes
  250. No
  251. Yes
  252. Yes
  253. No
  254. Yes
  255. Yes
  256. Yes
  257. Yes
  258. No
  259. Yes
  260. Yes
  261. Yes
  262. Yes
  263. Yes
  264. Yes
  265. Yes
  266. No
  267. Yes
  268. Yes
  269. No
  270. Yes
  271. Yes
  272. Yes
  273. Yes
  274. No
  275. No
  276. Yes
  277. Yes
  278. Yes
  279. No
  280. Yes
  281. Yes
  282. Yes
  283. Yes
  284. Yes
  285. Yes
  286. Yes
  287. Yes
  288. Yes
  289. Yes
  290. No
  291. Yes
  292. No
  293. Yes
  294. Yes
  295. Yes
  296. No
  297. Yes
  298. Yes
  299. Yes
  300. Yes
  301. Yes
  302. No
  303. No
  304. Yes
  305. No
  306. Yes
  307. Yes
  308. No
  309. No
  310. Yes
  311. Yes
  312. Yes
  313. Yes
  314. No
  315. Yes
  316. No
  317. Yes
  318. Yes
  319. Yes
  320. Yes
  321. No
  322. No
  323. Yes
  324. Yes
  325. Yes
  326. Yes
  327. Yes
  328. Yes
  329. Yes
  330. Yes
  331. Yes
  332. No
  333. No
  334. No
  335. No
  336. No
  337. Yes
  338. No
  339. Yes
  340. Yes
  341. Yes
  342. Yes
  343. Yes
  344. Yes
  345. Yes
  346. Yes
  347. Yes
  348. Yes
  349. Yes
  350. No
  351. Yes
  352. No
  353. Yes
  354. No
  355. Yes
  356. No
  357. Yes
  358. No
  359. Yes
  360. No
  361. Yes
  362. Yes
  363. Yes
  364. Yes
  365. No
  366. Yes
  367. Yes
  368. Yes
  369. No
  370. Yes
  371. Yes
  372. Yes
  373. Yes
  374. Yes
  375. No
  376. No
  377. Yes
  378. Yes
  379. No
  380. Yes
  381. Yes
  382. No
  383. Yes
  384. Yes
  385. Yes
  386. Yes
  387. Yes
  388. Yes
  389. Yes
  390. Yes
  391. Yes
  392. Yes
  393. Yes
  394. Yes
  395. Yes
  396. Yes
  397. Yes
  398. Yes
  399. No
  400. Yes
  401. Yes
  402. Yes
  403. No
  404. Yes
  405. Yes
  406. No
  407. Yes
  408. Yes
  409. Yes
  410. No
  411. Yes
  412. Yes
  413. No
  414. Yes
  415. No
  416. Yes
  417. No
  418. Yes
  419. Yes
  420. No
  421. Yes
  422. Yes
  423. Yes
  424. Yes
  425. No
  426. Yes
  427. Yes
  428. Yes
  429. Yes
  430. No
  431. Yes
  432. No
  433. Yes
  434. Yes
  435. Yes
  436. No
  437. Yes
  438. Yes
  439. Yes
  440. No
  441. Yes
  442. Yes
  443. Yes
  444. No
  445. No
  446. Yes
  447. No
  448. Yes
  449. Yes
  450. No
  451. Yes
  452. Yes
  453. Yes
  454. Yes
  455. No
  456. Yes
  457. Yes
  458. No
  459. Yes
  460. Yes
  461. Yes
  462. Yes
  463. Yes
  464. Yes
  465. Yes
  466. Yes
  467. No
  468. Yes
  469. Yes
  470. Yes
  471. No
  472. No
  473. No
  474. Yes
  475. No
  476. No
  477. Yes
  478. Yes
  479. Yes
  480. Yes
  481. Yes
  482. Yes
  483. Yes
  484. Yes
  485. Yes
  486. No
  487. Yes
  488. Yes
  489. Yes
  490. Yes
  491. Yes
  492. No
  493. Yes
  494. Yes
  495. Yes
  496. No
  497. No
  498. Yes
  499. Yes
  500. Yes
  501. No
  502. Yes
  503. Yes
  504. No
  505. No
  506. No
  507. Yes
  508. No
  509. Yes
  510. Yes
  511. No
  512. Yes
  513. Yes
  514. Yes
  515. Yes
  516. Yes
  517. Yes
  518. No
  519. Yes
  520. Yes
  521. Yes
  522. No
  523. No
  524. Yes
  525. Yes
  526. Yes
  527. Yes
  528. Yes
  529. No
  530. Yes
  531. Yes
  532. No
  533. Yes
  534. Yes
  535. Yes
  536. No
  537. Yes
  538. Yes
  539. No
  540. Yes
  541. No
  542. Yes
  543. No
  544. No
  545. Yes
  546. No
  547. Yes
  548. Yes
  549. No
  550. Yes
  551. Yes
  552. Yes
  553. No
  554. Yes
  555. Yes
  556. No
  557. No
  558. No
  559. No
  560. No
  561. Yes
  562. No
  563. Yes
  564. No
  565. Yes
  566. Yes
  567. No
  568. Yes
  569. Yes
  570. No
  571. No
  572. Yes
  573. Yes
  574. Yes
  575. Yes
  576. Yes
  577. Yes
  578. Yes
  579. No
  580. Yes
  581. No
  582. Yes
  583. Yes
  584. No
  585. Yes
  586. No
  587. Yes
  588. Yes
  589. No
  590. No
  591. Yes
  592. Yes
  593. Yes
  594. No
  595. No
  596. No
  597. No
  598. No
  599. No
  600. Yes
  601. Yes
  602. No
  603. No
  604. No
  605. Yes
  606. Yes
  607. Yes
  608. No
  609. Yes
  610. Yes
  611. No
  612. No
  613. Yes
  614. Yes
  615. No
  616. Yes
  617. Yes
  618. Yes
  619. No
  620. Yes
  621. Yes
  622. No
  623. No
  624. Yes
  625. No
  626. Yes
  627. Yes
  628. No
  629. Yes
  630. Yes
  631. Yes
  632. No
  633. Yes
  634. No
  635. No
  636. Yes
  637. Yes
  638. Yes
  639. Yes
  640. No
  641. No
  642. Yes
  643. No
  644. Yes
  645. Yes
  646. No
  647. Yes
  648. No
  649. No
  650. No
  651. Yes
  652. No
  653. No
  654. No
  655. Yes
  656. Yes
  657. No
  658. Yes
  659. Yes
  660. Yes
  661. Yes
  662. No
  663. Yes
  664. Yes
  665. Yes
  666. Yes
  667. Yes
  668. Yes
  669. No
  670. Yes
  671. Yes
  672. Yes
  673. Yes
  674. Yes
  675. No
  676. Yes
  677. Yes
  678. No
  679. Yes
  680. Yes
  681. Yes
  682. Yes
  683. Yes
  684. Yes
  685. Yes
  686. Yes
  687. Yes
  688. Yes
  689. Yes
  690. Yes
  691. Yes
  692. Yes
  693. Yes
  694. Yes
  695. Yes
  696. Yes
  697. Yes
  698. Yes
  699. Yes
  700. Yes
  701. No
  702. No
  703. Yes
  704. Yes
  705. Yes
  706. Yes
  707. No
  708. No
  709. Yes
  710. Yes
  711. Yes
  712. No
  713. Yes
  714. Yes
  715. No
  716. Yes
  717. Yes
  718. Yes
  719. Yes
  720. Yes
  721. No
  722. No
  723. No
  724. Yes
  725. No
  726. Yes
  727. Yes
  728. No
  729. No
  730. Yes
  731. Yes
  732. No
  733. Yes
  734. Yes
  735. Yes
  736. Yes
  737. No
  738. Yes
  739. Yes
  740. No
  741. Yes
  742. Yes
  743. Yes
  744. Yes
  745. Yes
  746. Yes
  747. Yes
  748. No
  749. Yes
  750. Yes
  751. Yes
  752. No
  753. Yes
  754. Yes
  755. No
  756. No
  757. Yes
  758. No
  759. Yes
  760. No
  761. Yes
  762. No
  763. Yes
  764. No
  765. Yes
  766. Yes
  767. No
  768. Yes
  769. Yes
  770. Yes
  771. Yes
  772. No
  773. Yes
  774. Yes
  775. Yes
  776. No
  777. Yes
  778. Yes
  779. Yes
  780. Yes
  781. No
  782. Yes
  783. Yes
  784. No
  785. Yes
  786. Yes
  787. Yes
  788. Yes
  789. No
  790. No
  791. No
  792. Yes
  793. Yes
  794. Yes
  795. Yes
  796. Yes
  797. No
  798. Yes
  799. Yes
  800. Yes
  801. Yes
  802. Yes
  803. Yes
  804. Yes
  805. Yes
  806. No
  807. Yes
  808. Yes
  809. Yes
  810. No
  811. Yes
  812. Yes
  813. No
  814. No
  815. No
  816. Yes
  817. Yes
  818. Yes
  819. Yes
  820. No
  821. Yes
  822. Yes
  823. No
  824. Yes
  825. Yes
  826. Yes
  827. No
  828. No
  829. No
  830. Yes
  831. Yes
  832. No
  833. No
  834. Yes
  835. No
  836. No
  837. Yes
  838. Yes
  839. Yes
  840. Yes
  841. No
  842. Yes
  843. No
  844. Yes
  845. Yes
  846. Yes
  847. No
  848. Yes
  849. Yes
  850. No
  851. No
  852. Yes
  853. Yes
  854. No
  855. Yes
  856. Yes
  857. Yes
  858. Yes
  859. No
  860. Yes
  861. Yes
  862. No
  863. No
  864. Yes
  865. No
  866. Yes
  867. Yes
  868. Yes
  869. Yes
  870. Yes
  871. Yes
  872. Yes
  873. Yes
  874. Yes
  875. Yes
  876. Yes
  877. Yes
  878. Yes
  879. No
  880. Yes
  881. Yes
  882. Yes
  883. Yes
  884. Yes
  885. No
  886. No
  887. Yes
  888. No
  889. Yes
  890. Yes
  891. Yes
  892. Yes
  893. Yes
  894. Yes
  895. Yes
  896. Yes
  897. Yes
  898. Yes
  899. Yes
  900. No
  901. No
  902. Yes
  903. Yes
  904. Yes
  905. Yes
  906. Yes
  907. Yes
  908. Yes
  909. Yes
  910. Yes
  911. Yes
  912. No
  913. Yes
  914. Yes
  915. No
  916. No
  917. Yes
  918. No
  919. No
  920. No
  921. Yes
  922. Yes
  923. No
  924. Yes
  925. No
  926. No
  927. Yes
  928. No
  929. Yes
  930. Yes
  931. Yes
  932. No
  933. Yes
  934. Yes
  935. Yes
  936. No
  937. No
  938. Yes
  939. No
  940. Yes
  941. Yes
  942. Yes
  943. Yes
  944. Yes
  945. Yes
  946. Yes
  947. No
  948. Yes
  949. No
  950. No
  951. Yes
  952. No
  953. No
  954. No
  955. Yes
  956. Yes
  957. Yes
  958. Yes
  959. No
  960. Yes
  961. Yes
  962. Yes
  963. Yes
  964. No
  965. Yes
  966. Yes
  967. No
  968. Yes
  969. Yes
  970. Yes
  971. Yes
  972. Yes
  973. No
  974. No
  975. Yes
  976. Yes
  977. Yes
  978. Yes
  979. No
  980. No
  981. No
  982. No
  983. Yes
  984. No
  985. Yes
  986. Yes
  987. Yes
  988. Yes
  989. Yes
  990. Yes
  991. Yes
  992. Yes
  993. Yes
  994. Yes
  995. Yes
  996. Yes
  997. Yes
  998. Yes
  999. No
  1000. Yes

Metodología k-NN

El problema en términos matemáticos se define de la siguiente forma.

  • Se tienen $M$ ejemplos (las 569 observaciones del problema analizado).
  • Cada ejemplo esta definido por un conjunto de variables ($x_1$, $x_2$, ..., $x_N$); es decir, las 30 columnas de datos.
  • Cada ejemplo pertenece a una clase y hay $P$ clases diferentes; en el caso analizado sólo hay dos clases: benigno o maligno.
  • Para un nuevo caso y con base en las 30 mediciones realizadas (variables), se desea pronosticar a que clase pertenece.

El método k-NN asígna una clase (de las $P$ posibles) al nuevo ejemplo en dos pasos. En el primer paso, determina los $k$ ejemplos más cercanos (distancia) al nuevo ejemplo; en el segundo paso, asigna la clase al nuevo punto por mayoría; es decir, asigna la clase con mayor frecuencia entre los $k$ vecinos más cercnos. Por ejemplo, si se consideran 7 vecinos, de los cuales 5 son "benignos" (y 2 "malignos") entonces el nuevo punto es clasificado como "benigno".

La distancia entre dos puntos $p$ y $q$ es:

$$dist(p, q) = \sqrt{\sum_{i=1}^N (p_i - q_i)^2}$$

Ejercicio. ¿Cómo se implementa computacionalmente este algoritmo?

Ya que la escala de las variables numéricas afecta la medición, se pueden realizar dos transformaciones:

Normalización min-max.

$$z_j = \frac{x - \text{min}(x_j)}{\text{max}(x_j) - \text{min}(x_j)}$$

Estandarización z.

$$z_j = \frac{x - \text{mean}(x_j)}{\text{std}(x_j) }$$

Para variables nominales que representan $S$ categorías se crean $S-1$ variables: la primera variable vale 1 si la variable nominal toma el valor de la primera categoría; la segunda variable vale 2 si la variable nominal toma el valor de la segunda categoría, y así sucesivamente. ¿Por qué se requieren $S-1$ variables para $S$ categorías de la variable nominal?.

Preparación de los datos


In [44]:
# se usa el 90% de los datos para entrenamiento y el 10% restante para prueba
set.seed(123) # inicializa la semilla del generador de aleatorios
train_sample <- sample(1000, 900) # muestrea 900 números al azar
str(train_sample)


 int [1:900] 288 788 409 881 937 46 525 887 548 453 ...

In [45]:
# genera los conjuntos de entrenamiento
credit_train <- credit[train_sample, ]
credit_test  <- credit[-train_sample, ]

In [46]:
# proporción de los créditos pagados y no pagados
# en el conjunto de entrenamiento
prop.table(table(credit_train$default))


      Yes        No 
0.7033333 0.2966667 

In [47]:
# proporción de los créditos pagados y no pagados
# en el conjunto de prueba
prop.table(table(credit_test$default))


 Yes   No 
0.67 0.33 

In [ ]:


In [ ]:

Entrenamiento del modelo


In [49]:
# carga la librería
# install.packages("C50")
library(C50)
credit_model <- C5.0(credit_train[-17], credit_train$default)
credit_model


Call:
C5.0.default(x = credit_train[-17], y = credit_train$default)

Classification Tree
Number of samples: 900 
Number of predictors: 20 

Tree size: 54 

Non-standard options: attempt to group attributes

In [50]:
summary(credit_model)


Call:
C5.0.default(x = credit_train[-17], y = credit_train$default)


C5.0 [Release 2.07 GPL Edition]  	Wed Feb 28 11:17:55 2018
-------------------------------

Class specified by attribute `outcome'

Read 900 cases (21 attributes) from undefined.data

Decision tree:

checking_balance in {> 200 DM,unknown}: Yes (412/50)
checking_balance in {< 0 DM,1 - 200 DM}:
:...other_debtors = guarantor:
    :...months_loan_duration > 36: No (4/1)
    :   months_loan_duration <= 36:
    :   :...installment_plan in {none,stores}: Yes (24)
    :       installment_plan = bank:
    :       :...purpose = car (new): No (3)
    :           purpose in {business,car (used),domestic appliances,education,
    :                       furniture,others,radio/tv,repairs,
    :                       retraining}: Yes (7/1)
    other_debtors in {co-applicant,none}:
    :...credit_history = critical: Yes (102/30)
        credit_history = fully repaid: No (27/6)
        credit_history = fully repaid this bank:
        :...other_debtors = co-applicant: Yes (2)
        :   other_debtors = none: No (26/8)
        credit_history in {delayed,repaid}:
        :...savings_balance in {> 1000 DM,501 - 1000 DM}: Yes (19/3)
            savings_balance = 101 - 500 DM:
            :...other_debtors = co-applicant: No (3)
            :   other_debtors = none:
            :   :...personal_status in {divorced male,
            :       :                   married male}: No (6/1)
            :       personal_status = female:
            :       :...installment_rate <= 3: Yes (4/1)
            :       :   installment_rate > 3: No (4)
            :       personal_status = single male:
            :       :...age <= 41: Yes (15/2)
            :           age > 41: No (2)
            savings_balance = unknown:
            :...credit_history = delayed: Yes (8)
            :   credit_history = repaid:
            :   :...foreign_worker = no: Yes (2)
            :       foreign_worker = yes:
            :       :...checking_balance = < 0 DM:
            :           :...telephone = none: No (11/2)
            :           :   telephone = yes:
            :           :   :...amount <= 5045: Yes (5/1)
            :           :       amount > 5045: No (2)
            :           checking_balance = 1 - 200 DM:
            :           :...residence_history > 3: Yes (9)
            :               residence_history <= 3: [S1]
            savings_balance = < 100 DM:
            :...months_loan_duration > 39:
                :...residence_history <= 1: Yes (2)
                :   residence_history > 1: No (19/1)
                months_loan_duration <= 39:
                :...purpose in {car (new),retraining}: No (47/16)
                    purpose in {domestic appliances,others}: Yes (3)
                    purpose = car (used):
                    :...amount <= 8086: Yes (9/1)
                    :   amount > 8086: No (5)
                    purpose = education:
                    :...checking_balance = < 0 DM: No (5)
                    :   checking_balance = 1 - 200 DM: Yes (2)
                    purpose = repairs:
                    :...residence_history <= 3: No (4/1)
                    :   residence_history > 3: Yes (3)
                    purpose = business:
                    :...credit_history = delayed: No (2)
                    :   credit_history = repaid:
                    :   :...age <= 34: Yes (5)
                    :       age > 34: No (2)
                    purpose = radio/tv:
                    :...employment_length in {0 - 1 yrs,
                    :   :                     unemployed}: No (14/5)
                    :   employment_length = 4 - 7 yrs: Yes (3)
                    :   employment_length = > 7 yrs:
                    :   :...amount <= 932: No (2)
                    :   :   amount > 932: Yes (7)
                    :   employment_length = 1 - 4 yrs:
                    :   :...months_loan_duration <= 15: Yes (6)
                    :       months_loan_duration > 15:
                    :       :...amount <= 3275: No (7)
                    :           amount > 3275: Yes (2)
                    purpose = furniture:
                    :...residence_history <= 1: Yes (8/1)
                        residence_history > 1:
                        :...installment_plan in {bank,stores}: Yes (3/1)
                            installment_plan = none:
                            :...telephone = yes: No (7/1)
                                telephone = none:
                                :...months_loan_duration > 27: No (3)
                                    months_loan_duration <= 27: [S2]

SubTree [S1]

property in {building society savings,unknown/none}: No (4)
property = other: Yes (6)
property = real estate:
:...job = skilled employee: No (2)
    job in {mangement self-employed,unemployed non-resident,
            unskilled resident}: Yes (2)

SubTree [S2]

checking_balance = 1 - 200 DM: No (5/2)
checking_balance = < 0 DM:
:...property in {building society savings,real estate,unknown/none}: Yes (8)
    property = other:
    :...installment_rate <= 1: Yes (2)
        installment_rate > 1: No (4)


Evaluation on training data (900 cases):

	    Decision Tree   
	  ----------------  
	  Size      Errors  

	    54  135(15.0%)   <<


	   (a)   (b)    <-classified as
	  ----  ----
	   589    44    (a): class Yes
	    91   176    (b): class No


	Attribute usage:

	100.00%	checking_balance
	 54.22%	other_debtors
	 50.00%	credit_history
	 32.56%	savings_balance
	 25.22%	months_loan_duration
	 19.78%	purpose
	 10.11%	residence_history
	  7.33%	installment_plan
	  5.22%	telephone
	  4.78%	foreign_worker
	  4.56%	employment_length
	  4.33%	amount
	  3.44%	personal_status
	  3.11%	property
	  2.67%	age
	  1.56%	installment_rate
	  0.44%	job


Time: 0.0 secs

Evaluación del modelo

Para evaluar el desempeño en problemas de clasificación dicotómicos (dos clases mutuamente excluyentes) se usa la siguiente tabla:

           Pronostico
            P     N
      P     VP    FN          
Real
      N     FP    VN

VP - Verdadero positivo (correcto)
VN - Verdadero negativo (correcto)
FN - Falso negativo
FP - Falso positivo

In [51]:
#install.packages("gmodels")
library(gmodels)
credit_pred <- predict(credit_model, credit_test)
CrossTable(credit_test$default, 
           credit_pred,
           prop.chisq = FALSE, 
           prop.c = FALSE, 
           prop.r = FALSE,
           dnn = c('actual default', 'predicted default'))


 
   Cell Contents
|-------------------------|
|                       N |
|         N / Table Total |
|-------------------------|

 
Total Observations in Table:  100 

 
               | predicted default 
actual default |       Yes |        No | Row Total | 
---------------|-----------|-----------|-----------|
           Yes |        60 |         7 |        67 | 
               |     0.600 |     0.070 |           | 
---------------|-----------|-----------|-----------|
            No |        19 |        14 |        33 | 
               |     0.190 |     0.140 |           | 
---------------|-----------|-----------|-----------|
  Column Total |        79 |        21 |       100 | 
---------------|-----------|-----------|-----------|

 

Mejora del modelo

Boosting


In [ ]:
credit_boost10 <- C5.0(credit_train[-17], credit_train$default,
                         trials = 10)

In [ ]:
credit_boost10

In [ ]:
summary(credit_boost10)

In [ ]:
credit_boost_pred10 <- predict(credit_boost10, credit_test)

In [ ]:
CrossTable(credit_test$default, 
           credit_boost_pred10,
           prop.chisq = FALSE, 
           prop.c = FALSE, 
           prop.r = FALSE,
           dnn = c('actual default', 'predicted default'))

In [ ]:


In [ ]:

Ejercicio. Determine si el modelo mejora con $k$ = 21 y se estándarizan las variables. Ayuda: use la función scale.

Ejercicio. Determine el valor óptimo de $k$ cuándo los datos son normalizados. Ayuda: Calcule la cantidad total de ejemplos mal clasificados para $k$ desde 1 hasta 27.

Ejercicio. Los resutados son dependientes de cómo se partieron los datos en entrenamiento y prueba. Cómo podría calcular de una forma más robusta la cantidad de vecinos?