Hiểu về Data Project
Ai cũng muốn xây Data project, thế ai sẽ là người đánh giá, và đánh giá thì ra làm sao?
Note: Cứ với tiến độ viết bài này thì chắc còn mút mùa mới xong được kế hoạch viết 100 bài trong năm nay huhu.
Học Data và làm dự án
Một điều mà mình rất hay thấy ở các bạn muốn đi theo ngành Data, đó là các bạn luôn cố gắng xây dựng cho mình một cái dự án, một cái Data project. Cái dự án, nó vừa là một thứ để các bạn có thể học thêm về những công cụ được sử dụng trong ngành, nâng cao kiến thức của bản thân; nó cũng là một điểm mạnh mà bạn có thể cho vào trong CV của bạn, để thể hiện khả năng và trình độ của bản thân trong việc nắm vững các kiến thức.
Có lẽ cũng vì sự cạnh tranh giữa các ứng viên với nhau, nên cũng khá nhiều bạn cố gắng để bổ sung và hoàn thiện được cái gạch đầu dòng này trong CV. Cũng một phần vì kiến thức của Data nó cũng hơi đặc thù, khó thể hiện được qua các thứ bằng cấp trong trường; có một cái kinh nghiệm dự án sẽ giúp nhà tuyển dụng có thể hiểu thêm về các kỹ năng của một ứng viên, thông qua cách ứng viên xử lý vấn đề thực tế. Nên kể ra theo nhận xét của mình, thì có cái dự án trong hồ sơ bản thân là thứ khá có giá trị: vừa để bạn học được thêm kỹ năng, và vừa là một câu chuyện để có thảo luận trong buổi phỏng vấn.
Về việc làm project thế nào thì mình sẽ không có quá nhiều nhận xét. DataGuyStory, một bạn cũng có nhiều kinh nghiệm trong ngành cũng đã chia sẻ khá nhiều về chủ đề này, và mình nghĩ cũng là một hướng dẫn khá là đáng lắng nghe về cách làm một data project (bro ơi, cho tôi xin ít phí quảng cáo nhé). Về hướng tiếp cận vấn đề, về cách tìm hiểu và đưa bài toán đi từ đầu đến cuối, cùng với các bước hỗ trợ như xây dựng tài liệu… mình nghĩ là đó cũng đã là hướng tốt rồi, chỉ cần bạn để chút tâm trí và tư duy vào là mình có thể theo được.
Mình chắc có thể mang lại một ít chia sẻ theo hướng khác, về cấu trúc của một data project, và cách những người từ phía ngoài sẽ nhìn vào để đánh giá một dự án về data.
Mang dự án lên bàn mổ
Một dự án data, từ dự án level học sinh sinh viên, cho đến các dự án trong các công ty tập đoàn, khi bạn để ý thì nó cũng sẽ luôn chia thành những phần nhất định không thể thiếu. Đêm lên bàn mổ xẻ cái dự án đó ra, thì những phần đó sẽ thể hiện các kỹ năng và kinh nghiệm khác nhau của người thực hiện. Thế nên, một cách để hiểu đó chính là nắm bắt về các phần khác nhau của dự án, cũng như các kỹ năng đi kèm với nó.
Data Collection (hoặc Data Ingestion): đây là phần đầu tiên của một dự án dữ liệu, đó là về việc bạn có nguồn dữ liệu từ đâu, và bạn mang nó về cho dự án của bạn.
Dữ liệu này có thể là các free dataset mà bạn có thể kiếm được; cũng có thể dữ liệu bạn lấy được từ crawler, từ các nguồn API, hoặc là data feed nào đó. Từ những source data này, bạn sẽ muốn mang nó về vào một hệ thống data nào đó để làm nguồn cho những bước kế tiếp của bạn: bạn có thể lưu về dưới dạng CSV, hoặc là bạn có thể đưa những dữ liệu này vào một hệ thống cơ sở dữ liệu nào đó.
Kỹ năng quan trọng của đầu tiên phần này, đó là về việc bạn hiểu nguồn dữ liệu của bạn. Mỗi nguồn dữ liệu sẽ có characteristics khác nhau: ví dụ như CSV, hoặc là TSV làm source, rồi các đặc điểm định dạng của API, của crawl source; tương tự như vậy với đích của dữ liệu: nếu là File-based như HDFS/Minio/S3; hay là bạn mang vào Database như MySQL, Postgres. Đó là sự khác biệt về format, data types, rồi các storage strategy.
Hiểu rõ nguồn và đích của dữ liệu, nó là tiền đề để bạn xây dựng các tiến trình xử lý dữ liệu thô. Xử lý dữ liệu thô đó là các bước xử lý record theo dạng 1:1, từ một bản ghi ở nguồn và bạn sẽ biến nó thành 1 bản ghi ở đích. Đây cũng là một phần căn bản cho việc làm data cleaning, data sanitation.
Việc xây dựng các tiến trình xử lý dữ liệu cũng sẽ là một bài kiểm tra về khả năng lập trình cũng như khả năng thiết kế hệ thống.
Data Transformation: có được dữ liệu đã trải qua sơ chế, đây là lúc bạn bắt đầu xây dựng và biến hoá các dữ liệu đó.
Lúc này thì bạn không chỉ đơn giản là hiểu về tính chất của dữ liệu, mà bắt đầu đi vào hiểu ngữ nghĩa của dữ liệu (data semantic). Các trường này có ý nghĩa là gì, định nghĩa của nó ra sao; khi dữ liệu được thể hiện thế này thì mình có thể hiểu nó ra làm sao. Các thông tin ở trong các bảng khác nhau sẽ có mối quan hệ tương quan là gì, mapping thế nào, reference với nhau ra sao. Một bài kiểm tra về việc nghiên cứu và đọc hiểu dữ liệu (nếu mà bạn làm dự án dữ liệu mà không hiểu ngữ nghĩa của dữ liệu thì coi như là bỏ…)
Khi bạn hiểu hơn về mặt dữ liệu, thì bạn sẽ bắt tay vào quá trình data modeling, đó là biến những dữ liệu từ thô thành thiết kế dễ sử dụng hơn, tuỳ theo phục vụ mục đích sử dụng sau đó. Thiết kế database schema, tuỳ nhu cầu sử dụng và áp dụng dimensional modelling, vân vân và mây mây, đây là về kỹ năng xử lý dữ liệu của bạn.
Đây cũng là điểm test về kỹ năng data processing của bạn. Hơi khác với xử lý dữ liệu thô (khi bạn xử lý record-by-record), ở đây là kỹ năng xử lý dataset của bạn. Có thể bạn sẽ viết bằng SQL, có thể bạn sẽ viết Python hoặc Spark, và ở đây sẽ thể hiện khả năng tư duy trên nhiều tệp dữ liệu, như các kỹ thuật JOIN, kỹ thuật filter và projection etc. Nếu là các bài toán về ML, thì còn thêm các kỹ thuật của Data Science, cách sử dụng numpy, pandas…
Xây dựng trình xử lý dữ liệu cũng không chỉ đơn giản là xử lý dữ liệu thế nào, mà cũng còn phải trả lời câu hỏi về việc xử lý vào lúc nào: Bạn muốn xử lý một lần, hay là bạn muốn xử lý theo lịch có sẵn, hoặc là xử lý khi cần (on-demand). Theo tiến trình xử lý dữ liệu của bạn mà có thể bạn cần mở rộng kỹ năng khác như là lập lịch, xây dựng dependency, hoặc là các quá trình xử lý phức tạp hơn như là Upsert, Rollback, vân vân…
Data Service: bạn xử lý xong dữ liệu, và bây giờ là đến phần thể hiện ra kết quả của bạn. Sau những thứ xử lý, thì cái mà bạn muốn trả về là gì?
Khi trả lại kết quả cuối, thì cái mà bạn muốn mang đến cho người đánh giá là gì? Bạn muốn trả lại bảng dữ liệu mà bạn đã xử lý, thì output của bạn là dataset. Tuy nhiên bạn cũng có thể trả lại một phân tích của bạn, thì nó sẽ là một cái visualization, một cái dashboard. Hoặc phức tạp hơn, bạn muốn trả lại một cái model, hoặc bạn muốn trả lại một cái API server, để bạn có thể gửi thông tin vào để lấy ra kết quả.
Nếu mà kết quả của bạn là một thứ technical như model serving hoặc là API server, thì đó sẽ là một bài kiểm tra về khả năng thiết kế cũng như kỹ năng lập trình của bạn. Nhưng nếu đáp án của bạn là một bảng dữ liệu, một visualization, thì nó sẽ là về kỹ năng trình bày dữ liệu của bạn. Nghe thì có thể hơi thiên về BI hơn, nhưng nếu mà bạn đã làm thì cũng nên chau chuốt đến cùng: cách sử dụng bảng biểu, biểu đồ để kể ra câu chuyện mình muốn đạt đến.
Khi nói về một dự án dữ liệu, thì có thể nói 3 phần đó là 3 phần gần như là không có dự án nào không có. Tuy nhiên, đó là cách nhìn từ phía trên xuống, và tuỳ theo đề bài được đặt ra, thì các kỹ năng có thể được biến thể một chút.
Yêu cầu thí sinh đọc kỹ đầu bài
Đương nhiên là với sự đa dạng của dự án dữ liệu, thì không thể nhìn mọi việc một cách máy móc được. Có rất nhiều biến thể, rất nhiều thứ khác bạn nên xem xét khi đi vào bài toán cụ thể.
Ở một số dự án cỡ nhỏ, có thể về phần xử lý dữ liệu thô và phần xử lý bảng dữ liệu sẽ được gộp lại thành một. Thay vì phải xử lý và lưu lại thành dữ liệu gốc, bạn có thể đọc lại dữ liệu và biến thẳng nó thành dữ liệu cuối.
Tuỳ vào đầu bài được đặt ra, mà sự quan trọng của công đoạn thiết kế sẽ khác nhau. Nếu bạn có một bài toán cụ thể mà bạn muốn giải quyết từ đầu, thì các bước biến đổi và model data ở giữa có thể được rút ngắn lại và bạn sẽ đi thẳng vào việc biến đổi dữ liệu để giải bài toán cuối. Còn nếu bạn muốn xây dựng hệ thống reporting và có thể giải đáp được một bài toán tổng quát hơn, thì việc thiết kế dữ liệu 1 cách flexible lại quan trọng hơn rất nhiều. Đề bài được đặt ra là tiêu chí quan trọng nhất để thiết kế bài giải.(xin được phép nhắc đi nhắc lại câu này)
Hiểu được các kỹ năng mà mình đang muốn nhắm đến thì lại là điều cần thiết. Bạn làm cái gì thì cũng nên hiểu là bạn đang sử dụng kỹ năng nào, và biết được điểm mạnh điểm yếu của các kỹ năng mình đang có sẽ là cách để bạn phát triển. Một dự án cũng sẽ thể hiện được các kỹ năng khác nhau ở các trình độ khác nhau, nên là quan trọng là bạn làm đến đâu thì hiểu đến đó.
Ngoài ra, mình cũng muốn nhắc đến một sự khác biệt rất lớn của một dự án cá nhân và một dự án công việc. Dự án cá nhân của bạn, thì nó sẽ có câu chuyện và bài toán cụ thể. Đi từ bài toán được đề ra là gốc để bạn xây dựng hệ thống, tập trung vào bài toán cụ thể được đề ra sẽ giúp bạn xây một hệ thống cụ thể và chi tiết, và cũng tập trung vào một tệp kỹ năng nhất định.
Tuy nhiên, dự án của business thì lại hơi khác một xíu. Các dự án data của business sẽ bắt đầu từ một vài bài toán cụ thể, tuy nhiên in the long run, business sẽ luôn muốn phát triển thêm từ những gì sẵn có, nên là bài toán của business sẽ luôn có một chút hướng là extend thêm từ những gì mình đã có. Thiết kế bài giải cho business sẽ phải nhắm để trở nên forward-looking, để có thể làm cho dự án có thể flexible và adapt thêm được các tính năng mới; chính vì thế data project của một business thì cần rất rất nhiều nghiên cứu ở giai đoạn Design. Khi đã đi làm rồi, thì hãy luôn nhìn vào bài toán tổng quát và liên tục nghiên cứu thêm về design, vì đó sẽ là kỹ năng đi cùng các dự án data đến suốt đời.
Thôi mình viết thế cũng dài rồi, nếu mọi người có hứng thú với bài trên thì có thể xem qua bài này
Cảm ơn anh Hiếu đã chia sẻ rất chi tiết. Điều quan trọng nhất đúng là đọc kỹ đầu bài và hiểu mình cần thể hiện tệp kỹ năng gì, vì bộ kỹ năng của Data Engineer, Analyst & Scientist có nhiều điểm khác biệt. Cùng một dataset có thể được dùng làm input cho các bài toán khác nhau (chẳng hạn xây data pipeline, hay dựng report, hay dựng predictive models).
Một điểm nữa em cũng đồng tình, đó là làm personal project thì process sẽ từ dataset có sẵn -> vẽ ra bài toán để giải sao cho thể hiện được kĩ năng. Còn trong thực tế, bài toán kinh doanh luôn luôn tồn tại trước, rồi mới tới các bước thu thập, xử lý data và phân tích. Trong framework phân tích CRISP-DM cũng nhấn mạnh là 1. business understanding <-> 2. data understanding luôn là bước đầu tiên trong quy trình phân tích.
Vậy nên khi có người hỏi "tìm kiếm project cá nhân như thế nào?" em thường khuyên là "hãy nghĩ vấn đề trước rồi kiếm dataset/tự collect data để giải nó" (tất nhiên là nói thì dễ hơn làm 😅). Em cảm giác ("cảm giác" thôi vì chưa có data chứng minh) là một số bạn analyst khi luyện tập thì thường tập trung vào phương pháp phân tích (visualization, tính metrics, machine learning v.v) mà quên mất bước hiểu bài toán.