返回文章列表

銷售預測與 AI 輔助開發實踐

本文探討如何利用機器學習模型預測銷售資料,並深入解析資料科學流程中的關鍵元件:資料、模型、訓練、評估與視覺化。同時,文章也介紹如何運用提示工程技巧結合 AI 輔助工具,如 GitHub Copilot 和 ChatGPT,提升開發效率,並提供程式碼範例與實務應用說明。

機器學習 Web 開發

在資料科學領域,構建有效的銷售預測模型需要整合資料處理、模型訓練、評估與視覺化等環節。本文將探討這些關鍵元件,並結合程式碼範例,解析如何使用 Pandas 函式庫進行資料處理,以及如何運用 GitHub Copilot 和 ChatGPT 等 AI 輔助工具提升開發效率。同時,我們也將探討提示工程的技巧,以更有效地運用這些工具。

從資料收集、清理到轉換,Pandas 提供了完整的工具鏈,讓資料處理流程更為順暢。模型訓練階段則需考量資料分割策略,以確保模型的泛化能力。此外,透過視覺化工具,能將分析結果以更直觀的方式呈現,提供商業決策所需的洞見。在程式碼開發方面,GitHub Copilot 能夠根據程式碼上下文提供智慧建議,而 ChatGPT 則能協助生成檔案、測試案例,甚至進行程式碼翻譯,大幅提升開發效率。提示工程的技巧則能幫助我們更有效地與這些 AI 工具互動,取得更精確的結果。

銷售預測問題拆解

在建立機器學習模型來預測銷售資料時,我們需要將問題拆解成更小的部分。在資料科學領域,這通常涉及以下幾個關鍵元件:

  • 資料(Data):負責儲存資訊的系統部分,可以來自多種來源,如資料函式庫、網路端點、靜態檔案等。
  • 模型(Model):負責從資料中學習並產生盡可能準確的預測。模型需要輸入來產生一個或多個輸出作為預測結果。
  • 訓練(Training):系統中負責訓練模型的模組,通常將資料分成訓練資料和樣本資料。
  • 評估(Evaluation):確保模型按預期運作的過程,透過資料和模型產生一個評分,指示模型的表現。
  • 視覺化(Visualization):透過圖表為業務提供有價值的見解,這是對業務最為可見的部分。

進一步拆解資料科學的步驟

要開始撰寫提示(Prompt),我們需要進一步拆解每個步驟:

  • 資料處理
    1. 收集資料:從特定來源(如資料函式庫、網路端點、靜態檔案等)取得資料。
    2. 清理資料:移除不相關的資料、重複資料等,以確保資料品質。
    3. 轉換資料:將資料轉換成對模型有用的格式。
  • 訓練模型
    1. 分割資料:將資料分成訓練資料和樣本資料,用於訓練和評估模型。
    2. 訓練模型:使用訓練資料來訓練模型,使其能夠學習和預測。

生成提示(Prompt)

以「收集資料」這個步驟為例,我們可以生成如下提示:

使用Pandas函式庫從data.xls收集資料並讀入DataFrame。

這個提示既通用又具體。通用在於它告訴我們要「收集資料」,而具體在於它指定了要使用的函式庫和資料結構(DataFrame)。根據使用的工具(如ChatGPT或GitHub Copilot),提示的複雜程度可以有所不同。

資料科學的提示策略

對於資料科學任務,以下是一些基本原則:

  • 提供上下文:例如,指設定檔案名稱,因為CSV檔案可以有任意名稱。
  • 指定方法:例如,使用Pandas函式庫來載入CSV檔案,因為有多種方法可以做到這一點。
  • 迭代:不斷迭代提示,重新措辭,增加分隔符號等,以獲得更好的結果。
  • 上下文感知:瞭解目前的工作環境,例如,在Notebook中,前面的單元格對GitHub Copilot是可見的;在ChatGPT中,先前的對話是可見的。

長提示策略

除了將問題拆解成小步驟並為每個步驟生成提示外,還可以使用長提示策略,即在一個提示中表達所有需要執行的步驟。例如:

你想要預測data.xsl檔案中的銷售資料。使用Python和Pandas函式庫,請執行以下步驟:
* 收集資料
* 清理資料
* 轉換資料
* 分割資料
* 訓練模型
* 評估模型

驗證解決方案

驗證AI助手產生的文字和程式碼的正確性至關重要。有兩種主要的驗證方法:

  • 透過提示驗證:使用提示來質疑特定結果的一致性,這在驗證過程的初期尤其有用。
  • 傳統驗證方法:根據問題領域的不同,傳統驗證技術包括測試程式碼、比較輸出結果,以及依靠自身和同儕的知識來驗證結果。

使用提示進行驗證

可以使用提示既產生結果,又驗證結果。例如,在建立登入頁面時,可以寫一個提示來描述所需的登入頁面特性,然後使用另一個提示來驗證生成的程式碼或文字是否符合預期。

範例程式碼與解析

import pandas as pd

# 從data.xls讀取資料
def collect_data(file_path):
    try:
        data = pd.read_excel(file_path)
        return data
    except Exception as e:
        print(f"讀取資料失敗:{e}")
        return None

# #### 內容解密:
# 這段程式碼定義了一個函式`collect_data`,用於從指定的Excel檔案讀取資料。它使用了Pandas函式庫中的`read_excel`函式。如果讀取成功,則傳回DataFrame;如果失敗,則列印錯誤訊息並傳回None。

data = collect_data('data.xls')
if data is not None:
    print("資料收整合功!")
else:
    print("請檢查檔案路徑或檔案是否損壞。")

程式碼解析:

  1. 引入Pandas函式庫,用於處理資料。
  2. 定義collect_data函式,接受檔案路徑作為引數,使用pd.read_excel讀取Excel檔案。
  3. 使用try-except區塊捕捉任何異常,如果讀取失敗,輸出錯誤訊息。
  4. 如果讀取成功,則傳回DataFrame;否則傳回None。
  5. 在主程式中呼叫collect_data函式,並根據傳回值判斷是否成功讀取資料。

驗證與 AI 助理工具的應用

在前一章中,我們討論瞭如何使用提示(Prompt)來解決問題並驗證結果。在本章中,我們將進一步探討兩個重要的 AI 助理工具:GitHub Copilot 和 ChatGPT,並瞭解如何利用這些工具來提升開發效率。

驗證輸出的多種方法

在驗證輸出的過程中,我們可以採用多種不同的方法。以下是幾種常見的驗證技術:

網頁開發中的驗證方法

  1. 測試(Testing):使用端對端測試或前端測試來驗證程式碼是否按預期工作。這類別測試通常涉及使用程式化的方式來模擬使用者與網頁的互動,例如使用 Selenium。

  2. 手動測試(Manual Testing):手動開啟網頁並與之互動,以驗證其功能。這是驗證過程中的一個良好起始點,除了互動外,還可以視覺檢查網頁是否符合需求。

  3. 程式碼審查(Code Review):審查程式碼以確保其正確性。這不僅能讓開發者自身,也能讓同行驗證輸出結果。

  4. 工具(Tools):使用各種工具來測試不同的場景,如無障礙性、效能等。這些工具很可能已經是開發流程的一部分。

資料科學中的驗證方法

  1. 單元測試(Unit Testing):用於驗證程式碼是否按預期工作。

  2. 整合測試(Integration Testing):用於驗證程式碼的整體運作是否正確。

  3. 結果驗證(Validation of Results):將分析或模型的結果與已知結果或基準進行比較。

  4. 交叉驗證(Cross Validation):將資料分成訓練資料和樣本資料,在訓練資料上訓練模型,並在樣本資料上評估。這是驗證過程中的一個良好起始點。

GitHub Copilot 與 ChatGPT 簡介

GitHub Copilot 和 ChatGPT 是兩款能夠幫助開發者更快速、更高效地編寫程式碼的 AI 助理工具。瞭解這些工具的功能和限制對於有效利用它們至關重要。

GitHub Copilot 的工作原理

GitHub Copilot 被視為一個「AI 配對程式設計師」,它能夠幫助開發者編寫程式碼,從而提高工作效率。它根據 OpenAI 的 Codex 模型,這是一個在公開可用的原始碼和自然語言上訓練出來的新型 AI 系統。Copilot 能夠在編輯器中直接建議整行或整個函式的程式碼。

安裝與使用 GitHub Copilot

要開始使用 GitHub Copilot,首先需要了解如何安裝它。安裝完成後,開發者可以透過它來生成程式碼補全,從而加速開發過程。

生成程式碼補全

Copilot 能夠根據開發者的輸入,自動生成符合上下文的程式碼建議。這使得開發者能夠專注於更高層次的邏輯設計,而將一些重複性的編碼工作交給 Copilot 來完成。

重點回顧

  • 使用多種方法驗證輸出結果,包括測試、手動測試、程式碼審查和各種工具。
  • GitHub Copilot 和 ChatGPT 是兩款能夠提高開發效率的 AI 助理工具。
  • GitHub Copilot 的工作原理和安裝使用方法。

透過本章的學習,讀者應該能夠對如何利用 AI 助理工具來提升開發效率有了更深入的瞭解。接下來的章節將繼續探討這些工具在不同領域的應用和實踐。

內容解密:

本章節主要介紹了驗證輸出的多種方法和兩款重要的 AI 助理工具:GitHub Copilot 和 ChatGPT。重點包括網頁開發和資料科學中的各種驗證技術,以及 GitHub Copilot 的工作原理和安裝使用方法。這些內容旨在幫助讀者瞭解如何利用這些工具來提高開發效率和解決問題。

驗證流程圖示

此圖示展示了驗證輸出的一般流程,包括測試、手動測試、程式碼審查和使用工具等步驟,最終完成驗證過程。

深入解析

本章節對驗證輸出的多種方法和 AI 助理工具的介紹,為讀者提供了全面的瞭解和實踐指導。透過學習這些內容,讀者可以更好地利用這些工具和方法來提高自己的開發效率和解決問題的能力。

使用 AI 助手:Copilot 的介紹與應用

Copilot 的工作原理

Copilot 是一種人工智慧工具,能夠根據使用者已寫的程式碼以及其他開發者撰寫的程式碼,提供程式碼建議。其運作原理是根據機器學習技術,透過訓練模型來預測使用者下一步可能需要的程式碼。Copilot 的模型是根據 GitHub 公開的程式碼倉函式庫進行訓練,並且會在執行時根據使用者的檔案內容動態建立上下文。

上下文建立

Copilot 會利用以下資訊來建立上下文:

  • 當前活動檔案的內容
  • 程式碼中的註解,用於理解程式碼的上下文
  • 開啟的檔案和工作區中的其他程式碼
  • 匯入陳述式,用於提供更精確的建議

Copilot 的功能與限制

Copilot 具備多種功能,包括:

  • 程式碼自動完成
  • 整段程式碼生成
  • 測試、註解和檔案生成
  • 程式碼改善建議
  • 程式碼翻譯(例如從 Python 翻譯到 JavaScript)
  • 針對程式碼的提問提供答案

Copilot 的安裝與設定

使用者可以在多種開發環境中使用 Copilot,包括 Visual Studio、Visual Studio Code 和 GitHub Codespaces。本章節將以 Visual Studio Code 為例,介紹如何安裝和設定 Copilot。

安裝 Copilot

  1. 在 Visual Studio Code 中開啟擴充套件市場,搜尋並安裝 GitHub Copilot 擴充套件。
  2. 如果尚未在 GitHub 帳戶中授權 Visual Studio Code,請登入 GitHub 帳戶。
  3. 如果已經授權,Copilot 將自動啟用。
  4. 如果未出現授權提示,請點選 Visual Studio Code 視窗底部面板的鈴鐺圖示。
  5. 在瀏覽器中,GitHub 將請求必要的許可權,請核准這些許可權。

開始使用 Copilot

  1. 在 Visual Studio Code 中建立一個名為 app.js 的新檔案。
  2. 在檔案頂部輸入註解 //Express web api with routes products and customers,然後按下 Enter 鍵。
  3. 等待幾秒鐘,Copilot 將提供程式碼建議,例如 const express = require('express');
  4. 按下 Tab 鍵接受建議,然後繼續按下 Enter 鍵和 Tab 鍵,以接受後續的建議,直到生成所需的程式碼。

程式碼範例

const express = require('express');
const app = express();
app.get('/products', (req, res) => {
  res.send('products');
});
app.get('/customers', (req, res) => {
  res.send('customers');
});
app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

內容解密:

  • const express = require('express');:載入 Express.js 框架。
  • const app = express();:建立 Express.js 應使用案例項。
  • app.get('/products', (req, res) => { ... });:定義一個處理 GET 請求的路由,用於傳回產品資訊。
  • app.listen(3000, () => { ... });:啟動伺服器並監聽 3000 連線埠。

改程式式碼

請根據以下建議改進 Copilot 生成的程式碼:

  • 新增根路由。
  • 新增特定產品的路由。
  • 為其中一個路由新增檔案。

可能的解決方案

const express = require('express');
const app = express();

// 新增預設路由
app.get('/', (req, res) => {
  res.send('Hello world');
});

app.get('/products', (req, res) => {
  res.send('products');
});

// 新增特定產品的路由
app.get('/products/:id', (req, res) => {
  const productId = req.params.id;
  res.send(`Product ${productId}`);
});

app.get('/customers', (req, res) => {
  res.send('customers');
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

內容解密:

  • app.get('/', (req, res) => { ... });:定義根路由,傳回 “Hello world”。
  • app.get('/products/:id', (req, res) => { ... });:定義特定產品的路由,根據產品 ID 傳回對應的產品資訊。

Chapter 3:深入理解GitHub Copilot與ChatGPT

使用GitHub Copilot進行開發

在前面的章節中,我們已經初步瞭解了GitHub Copilot的基本功能。現在,讓我們透過一個具體的範例來展示如何在實際開發中使用Copilot。以下是一個簡單的Node.js應用程式,用於處理HTTP請求:

const express = require('express');
const app = express();

app.get('/products', (req, res) => {
  res.send('products');
});

/**
 * 根據ID取得產品資訊
 * @param {number} id - 產品的ID
 */
app.get('/products/:id', (req, res) => {
  res.send(`product with id ${req.params.id}`);
});

app.get('/customers', (req, res) => {
  res.send('customers');
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

內容解密:

  1. 匯入Express模組const express = require('express'); 用於建立一個Express應使用案例項。
  2. 定義路由app.get('/products', (req, res) => { ... }); 定義了一個處理GET請求的路由,當使用者存取/products時,伺服器傳回'products'
  3. 引數化路由app.get('/products/:id', (req, res) => { ... }); 展示瞭如何處理帶引數的路由,伺服器根據請求的ID傳回相應的產品資訊。
  4. 啟動伺服器app.listen(3000, () => { ... }); 使伺服器監聽在3000埠,並在啟動成功後列印日誌。

挑戰:為路由新增測試

在下一章中,我們將更詳細地探討如何有效地使用Copilot。要充分利用任何AI輔助工具,瞭解其工作原理和正確使用方法是至關重要的。這種技能被稱為提示工程(Prompt Engineering)。提示工程不僅僅是寫一個註解,更是如何指導AI輔助工具解決問題、應用某種推理方式等的藝術。

參考資料

  • GitHub Copilot登入頁面:https://github.com/features/copilot
  • GitHub Copilot檔案:https://docs.github.com/en/copilot/getting-started-with-github-copilot

理解ChatGPT

ChatGPT是OpenAI開發的一種專門為模擬人類對話而設計的GPT模型版本。它擅長在對話中建立類別人的文字,能夠處理多種話題。使用者可以透過存取chat.openai.com免費使用ChatGPT,或者選擇收費的ChatGPT Plus(也稱為GPT-4)版本,該版本具備撰寫文章、生成藝術提示和程式設計程式碼等功能。收費版本提供了更多高階功能,如視覺和音訊輸入輸出處理、檔案上傳、程式碼執行、資料視覺化(使用特定的Python函式庫)以及可定製的GPT功能。

ChatGPT的工作原理

ChatGPT與Copilot在程式碼導向的方法上相似,但專注於自然語言處理,擅長內容生成,對傳統的搜尋引擎提出了挑戰。它在撰寫文章和總結文字等任務中表現出色。ChatGPT的回應品質嚴重依賴於它接收到的提示。

ChatGPT的能力與限制

能力:

  • 內容建立:能夠生成創意內容,包括行銷材料、部落格文章、故事和詩歌。
  • 教育解釋:為複雜的話題提供詳細的解釋,用於教育目的。
  • 程式設計輔助:幫助開發者進行程式碼最佳化、錯誤除錯和演算法設計。
  • 學習輔助:作為線上學習的夥伴,提供實時幫助和概念澄清。
  • 對話式AI:透過自然語言互動提升虛擬助手和聊天機器人的使用者經驗。

限制和問題:

  • 準確性問題:ChatGPT可能會生成具有事實錯誤或偏見的回應,也被稱為“幻覺”。這些輸出通常源於AI模型的固有偏見、缺乏對真實世界的理解或訓練資料的限制。
  • 倫理影響:引發了人們對濫用AI生成內容進行詐騙活動或有害資訊收集的擔憂。
  • 就業影響:人們擔心AI會取代某些行業的人類工作職位。
  • 安全風險:可能被用於網路釣魚、建立惡意軟體和網路犯罪活動。
  • 資料隱私:人們擔心在訓練過程中使用大量的網際網路資料會影響使用者隱私。

設定與安裝ChatGPT

設定和安裝ChatGPT涉及幾個步驟:

  1. 建立OpenAI賬戶:存取OpenAI網站並註冊賬戶。
  2. API存取:開發者需要在OpenAI平台上申請API存取許可權。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title 銷售預測與 AI 輔助開發實踐

package "銷售預測與 AI 輔助開發" {
    package "資料科學流程" {
        component [Pandas 處理] as pandas
        component [資料清理轉換] as transform
        component [視覺化呈現] as visualize
    }

    package "AI 輔助工具" {
        component [GitHub Copilot] as copilot
        component [ChatGPT] as chatgpt
        component [提示工程] as prompt
    }

    package "模型開發" {
        component [訓練資料分割] as split
        component [模型評估] as evaluate
        component [驗證解決方案] as validate
    }
}

collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型

note right of feature
  特徵工程包含:
  - 特徵選擇
  - 特徵轉換
  - 降維處理
end note

note right of eval
  評估指標:
  - 準確率/召回率
  - F1 Score
  - AUC-ROC
end note

@enduml

此圖示展示了設定ChatGPT的基本流程。使用者首先需要建立一個OpenAI賬戶,然後申請API存取,最終可以使用ChatGPT的功能。

內容解密:

  1. 建立OpenAI賬戶:這是使用ChatGPT的第一步,使用者需要在OpenAI官網註冊。
  2. 申請API存取:開發者需要透過OpenAI平台申請API存取許可權,這使得他們能夠在自己的應用程式中整合ChatGPT的功能。
  3. 使用ChatGPT:完成上述步驟後,使用者可以開始使用ChatGPT進行各種任務,如內容生成、程式設計輔助等。