哈爾濱金融學院--利用AI大模型輔助學生完成金融資料分析綜合實踐作業--基於智譜清言(ChatGLM)平臺

senzhang10發表於2024-07-07

利用AI大模型輔助學生完成金融資料分析綜合實踐作業--基於智譜清言(ChatGLM)平臺

1、實驗目的

  • 掌握透過合適的提示詞,和智譜清言進行互動的方法
  • 掌握在不同的程式設計任務場景下,讓智譜清言輔助完成任務的方法

2、實驗內容

本次實驗的內容為《農村地區居民人均可支配收入水平綜合評價》綜合實踐任務,實驗給定一個表格(見附件),表格檔名為: 農村居民人均可支配收入來源2016.xlsx ,表格的資料為2016年我國31個省、自治區和直轄市的農村地區居民的工資性收入、經營淨收入、財產淨收入、轉移淨收入,要求學生根據每個省份的這四個指標資料,使用主成分分析技術,對每個省份的居民人均可支配收入水平進行綜合評價。開發語言為Python,程式設計工具為Anaconda。

本次實驗的程式碼可以分為五個部分,分別為:

  • (1) 使用Pandas庫讀入Excel表格資料
  • (2) 對資料進行標準化
  • (3) 對資料進行主成分分析,對原始資料的四個特徵按照0.95的貢獻率進行降維
  • (4) 獲取每個新維度的貢獻率,並獲取每個省份的總得分
  • (5) 根據每個省份的總得分進行降序排序

本次實驗給出的指導程式碼並不完整,有的部分需要學生補全,有的部分需要學生完整編寫。注意程式碼中的xxxxxxxx、xxxx1、yyyy1這些符號是需要補全的程式碼。程式碼的最後一部分是學生需要全部寫出的。

指導程式碼如下:

# -*- coding: utf-8 -*-
# 第一部分:使用Pandas庫讀入Excel表格資料
import pandas as pd
Data=pd.read_excel('農村居民人均可支配收入來源2016.xlsx')
X=Data.iloc[:,1:]
R=X.corr()

# 第二部分:對資料進行標準化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X) 
X=scaler.transform(X)  

# 第三部分:對資料進行主成分分析,對原始資料的四個特徵
# 按照0.95的貢獻率進行降維
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95) 
pca.fit(X)
Y=pca.transform(X)

# 第四部分: 
# 獲取每個主成分的貢獻率
# xxxxxxxx需要補全         
gxl=pca.xxxxxxxx 
# 綜合得分=各個主成分*貢獻率之和
# xxxx1、xxxx2、xxxx3和yyyy1、yyyy2、yyyy3需要補全
F=gxl[xxxx1]*Y[yyyy1]+gxl[xxxx2]*Y[yyyy1]+gxl[xxxx3]*Y[yyyy3] 

# 第五部分:對31個省市的綜合得分進行排序輸出
# 學生需自行完成

為了讓學生掌握如何利用AI大模型來輔助自己編寫程式碼完成綜合實踐作業的課程表,本實驗指導從在完成《農村地區農村居民人均可支配收入水平綜合評價》中會遇到的常見的任務場景來展開,包括的場景如下:

  • (1) 讓AI理解你的需求
  • (2) 讓AI輔助你理解任務中需要的知識和原理
  • (3) 讓AI輔助你理解老師給出的示例程式碼的作用
  • (4) 讓AI輔助你檢測程式碼中的語法錯誤程式碼並輔助你修改
  • (5) 讓AI輔助你完成缺少程式碼的輔助補全
  • (6) 讓AI輔助你自己判定程式碼寫的對不對

3、實驗步驟

3.1 註冊智譜清言

智譜清言為基於智譜 AI 公司於2023年訓練的語言模型開發的AI大模型平臺,它可以透過對對話的形式,針對使用者的問題和要求提供適當的答覆和支援。下面的內容中,使用單詞ChatGLM來代表智譜清言的角色,使用單詞Student來代表學生的角色。首先大家需要在官網上註冊智譜清言。步驟如下:

    1. 訪問 https://chatglm.cn/
    1. 使用手機號註冊
    1. 現在就可以開始使用智譜清言了

恭喜你,完成了和AI大模型互動的第一步。接下來的實驗會根據學生在完成《農村地區農村居民人均可支配收入水平綜合評價》中會遇到的各種需要AI工具輔助助學的場景來展開的,建議同學按順序進行完成。

3.2 場景一:讓AI理解老師佈置的任務

    1. 為智譜清言設定任務的背景,請在對話方塊內輸入下面的文字

Student: 我是一名大三的學生,正在上《金融資料分析綜合實踐》的課程,老師佈置了一個作業,要求我們使用Python語言,加Anaconda開發工具進行完成。請根據我下面的指令,輔助我完成這個作業。

ChatGLM: 當然可以,我很樂意幫助你完成作業。請告訴我具體的作業要求,以及你需要幫助的部分。

[ChatGLM回答完畢]

教師提示:請注意,ChatGLM在回覆時,每次結果不一定一樣

    1. 為智譜清言提供本次作業的內容,請在對話方塊內輸入下面的文字

Student: 本次作業的題目為《農村地區居民人均可支配收入水平綜合評價》,老師給了我們一個表格,表格資料為2016年我國31個省、自治區和直轄市的農村地區居民的工資性收入、經營淨收入、財產淨收入、轉移淨收入,要求我們根據每個省份的這四個指標資料,對每個省份的居民人均可支配收入水平進行綜合評價,方法為主成分分析,老師給了部分程式碼,請結合以上內容,輔助我繼續完成這個作業。

ChatGLM: 好的,首先我們需要匯入所需的庫,並載入資料。接下來,我們將使用主成分分析(PCA)對資料進行降維,以便對每個省份的居民人均可支配收入水平進行綜合評價。


......


[ChatGLM回答完畢]

教師提示:這裡的......代表省略的內容。此步驟ChatGLM還有很多內容的輸出,同學們可以暫時不用管。下同

3.3 場景二:學習任務中用到的原理

看到上面ChatGLM的輸出,同學們會想到在課堂上老師講過了使用利用主成分分析進行特徵降維,然後根據每個維度對若干個物件進行排序,從而完成綜合評價的理論內容,但有一些知識點遺忘或不完全理解。因此,可以繼續對智譜清言發問,來理清具體的知識點和原理。繼續輸入下面的文字。

Student: 我對主成分分析的原理不太理解,請簡要幫我再介紹一下。
ChatGLM: 當然可以。主成分分析(Principal Component Analysis,PCA)是一種常用的資料降維方法,它透過線性變換將原始資料變換為一組各維度線性無關的表示,通常用於提取資料的主要特徵分量。

在PCA中,我們希望找到一組新的座標軸(即主成分),使得資料在這些座標軸上的方差最大。這樣,第一主成分解釋了資料中的最大方差,第二主成分解釋了資料中的次大方差,以此類推。這些主成分能夠捕捉到資料的最重要資訊,並且彼此之間是不相關的。

以下是PCA的基本步驟:


......


在你的作業中,PCA可以幫助你從四個收入指標中提取最重要的資訊,並對每個省份的居民人均可支配收入水平進行綜合評價。透過計算每個省份在前幾個主成分上的得分,你可以得到一個綜合得分,用來對省份進行排序和比較。

[ChatGLM回答完畢]

3.4 示例程式碼講解

假定根據以上的對話,你已經初步懂得了主成分分析的數學原理,並明白如何利用主成分分析對農村居民人均可支配收入水平進行排序的基本過程。(如果你存在自己的具體問題,那請根據上面的參考步驟,結合你自己的問題,去和ChatGLM進行互動)

現在,你開始閱讀實驗指導中老師釋出的第一部分程式碼,程式碼如下,

# 匯入資料
import pandas as pd
Data=pd.read_excel('農村居民人均可支配收入來源2016.xlsx')
X=Data.iloc[:,1:]
R=X.corr()

但是最後一行程式碼你不懂,因此你可以使用下面的文字,繼續向ChatGLM提問。

Student: 針對此次作業,老師給了一部分參考程式碼,程式碼如下。

# 匯入資料
import pandas as pd
Data=pd.read_excel('農村居民人均可支配收入來源2016.xlsx')
X=Data.iloc[:,1:]
R=X.corr()

但是這段程式碼的最後一行 R=X.corr()我不明白,請結合本次作業,幫我解釋一下。

ChatGLM: ......

在你這次作業的背景下,X 包含了四個收入指標(工資性收入、經營淨收入、財產淨收入、轉移淨收入),這些指標可能存在一定的相關性。例如,一個地區的工資性收入高,可能其他收入也會相對較高。透過計算相關係數,我們可以瞭解到這四個指標之間的相互關係,這有助於我們理解資料的特點,並在進行主成分分析之前有一個初步的認識。

相關係數矩陣R是一個方陣,其中行和列分別代表不同的收入指標。對角線上的元素都是1,因為一個變數與其自身的相關係數是1。非對角線上的元素表示不同變數之間的相關係數。

在你後續的主成分分析中,如果發現某些指標之間的高度相關性,PCA可以幫助識別這些指標背後的共同因素,並透過主成分來表示這些因素,從而實現降維和特徵提取。

[ChatGLM回答完畢]

3.5 語法錯誤程式碼的智慧檢測和輔助修改

在完成了上面的程式碼的基礎上,接下來我們要進行資料的標準化。你繼續按照指導手冊上輸入程式碼,程式碼如下:

# 資料規範化處理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X) 
X=scaler.transform(X)  

不出意外的,你在寫程式碼的時候不小心敲錯了一些單詞,你的輸入如下:

# 資料規範化處理
from sklearn.preprocessing import StandardScaler
scaler = StandardScalar()
scaler.fit(X) 
X=scaler.transform(X) 

導致你的程式碼在執行的時候出現了語法錯誤。雖然經過你仔細檢視,但你還是沒有發現錯誤在哪裡,我們使用下面的文字,把這段程式碼整體提交給ChatGLM,讓ChatGLM幫助我們發現錯誤在那裡,並幫助你改正。

Student: 現在,我的資料儲存在變數X中,需要對資料進行標準化。我使用了下面這段程式碼,

# 資料規範化處理
from sklearn.preprocessing import StandardScaler
scaler = StandardScalar()
scaler.fit(X) 
X=scaler.transform(X) 

但是程式碼執行不成功,請幫我檢查程式碼在哪裡出了問題,並幫助我修改正確。

ChatGLM:在您提供的程式碼中,有一個小錯誤:StandardScaler 的首字母應該是小寫的 ‘s’,而不是大寫的 ‘S’。正確的類名是 StandardScaler,而不是 StandardScalar。

以下是修改後的程式碼:

# 資料規範化處理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()  # 修改這裡:將 'Scalar' 改為 'Scaler'
scaler.fit(X) 
X = scaler.transform(X) 

......
[ChatGLM回答完畢]

教師提示:此處ChatGLM的回覆基本上是正確的。它幫助我們發現了程式碼中的錯誤,正確的類名是 StandardScaler,而不是 StandardScalar,並在下面的修改程式碼中,正確地進行了修改。但是它的第一句輸出, 在您提供的程式碼中,有一個小錯誤:StandardScaler 的首字母應該是小寫的 ‘s’,而不是大寫的 ‘S’。 則是錯誤的,請同學注意,大模型的回覆並不一定就是正確,請大家不要絕對的盲目相信。**

3.6 缺少程式碼的輔助補全

完成資料標準化後,下面需要進行主成分分析,但是老師只給出了部分程式碼和它的註釋,需要你根據註釋,補全這些程式碼,你可以利用下面的文字讓ChatGLM繼續輔助你完成這個任務。

Student: 現在X已經是標準化之後的資料了,接下來使用主成分分析對X進行降維,老師給出的程式碼如下:

#主成分分析
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95) 
pca.fit(X)
Y=pca.transform(X)

請先幫我解釋上面每一行程式碼的作用。

ChatGLM:
當然,讓我們逐一解釋上面程式碼的作用:
當然,讓我們逐一解釋上面程式碼的作用:

  1. from sklearn.decomposition import PCA
    這行程式碼從 sklearn 庫的 decomposition 模組中匯入 PCA 類。PCA 類是用於主成分分析的一個工具。
  2. pca = PCA(n_components=0.95)
    這行程式碼建立了一個 PCA 物件的例項,並設定了 n_components=0.95 引數。這個引數的含義是保留資料中 95% 的方差。這意味著 PCA 會自動選擇足夠多的主成分,以便這些主成分能夠解釋原始資料中 95% 的方差。如果你想要固定主成分的數量,可以將這個引數設定為一個整數(例如 n_components=2)。


    ......


    [ChatGLM回答完畢]

Student: 剩餘的程式碼,老師給了部分程式碼,程式碼並不完整,但給了註釋,請結合程式碼和註釋幫我補全。
註釋為: 獲取每個主成分的貢獻率,儲存在變數gxl中
程式碼為gxl=pca.xxxxxxxx,xxxxxxxx為需要我自己補全的部分,應該寫什麼呢?

ChatGLM:
根據註釋,你需要獲取每個主成分的貢獻率並儲存在變數 gxl 中。在 sklearnPCA 物件中,每個主成分的貢獻率可以透過屬性 explained_variance_ratio_ 來獲取。這個屬性返回一個陣列,其中每個元素表示對應主成分解釋的方差佔總方差的比例。
因此,你可以將程式碼補全為:

gxl = pca.explained_variance_ratio_

這樣,gxl 變數就會儲存每個主成分的貢獻率。


......


[ChatGLM回答完畢]

根據ChatGLM給出的回覆,xxxxxxxx應該為explained_variance_ratio_(如果ChatGLM也是這個的話,恭喜你,你的AI非常智慧,它答對了)。繼續利用ChatGLM幫助你完成作業。

Student: 上面的答案我理解了,下面請接續輔助我完成程式碼。
註釋為: 利用上面程式碼中的gxl變數,結合降維之後的變數Y,完成綜合排序得分的計算,程式碼為

F=gxl[xxxx1]*Y[yyyy1]+gxl[xxxx2]*Y[yyyy1]+gxl[xxxx3]*Y[yyyy3]

,裡面的xxxx1、xxxx2、xxxx3和yyyy1、yyyy2、yyyy3是需要補全的部分,應該寫什麼呢?

ChatGLM:
根據註釋,你需要使用 gxl 變數(主成分貢獻率)和降維後的資料 Y 來計算每個省份的綜合排序得分。在這個上下文中,F 應該是一個新的陣列,其中每個元素是每個省份的綜合得分,計算方式是將每個主成分的得分乘以其對應的貢獻率,然後將這些乘積相加。
假設你想要使用前三個主成分來計算綜合得分,你可以這樣補全程式碼:

F = gxl[0] * Y[:, 0] + gxl[1] * Y[:, 1] + gxl[2] * Y[:, 2]

這裡的 gxl[0]gxl[1]gxl[2] 分別是前三個主成分的貢獻率,而 Y[:, 0]Y[:, 1]Y[:, 2] 分別是降維後的資料 Y 中對應於這三個主成分的得分。Y[:, 0] 表示所有樣本在第一個主成分上的得分,Y[:, 1] 表示所有樣本在第二個主成分上的得分,以此類推。
這樣,F 陣列中的每個元素就是對應省份的綜合排序得分。你可以根據這個得分對省份進行排序,以完成綜合評價。


......


[ChatGLM回答完畢]

教師提示;如果你的ChatGLM也回覆了類似的程式碼,再次恭喜你,你的AI繼續保持了超高的智慧水準

3.7 輔助自己判定程式碼寫的對不對

恭喜你透過了前面的步驟,現在你覺得自己可以完全動手把程式碼的最後一部分:根據變數F中的值,對31個省市地區的農村居民人均收入水平進行排序,程式碼寫好了,執行結果看起來似乎也不錯,但你想再求證一下,你也可以讓ChatGLM來幫助你檢查一下。

Student:現在我需要利用F和Data對31個省市地區的農村居民人均收入水平進行排序,我寫了下面的一段程式碼,請幫我檢查是否能夠完成該功能,如果能,請確認;如果不能,請幫助改正。程式碼如下:

#排序輸出
dq=list(Data['地區'].values)  #提取地區
Rs=pd.Series(F,index=dq)           #以地區作為index,綜合得分為值,構建序列
Rs=Rs.sort_values(ascending=False) #按綜合得分降序進行排序

ChatGLM:你的程式碼基本上是正確的,但是有一個小問題。在你提取地區資訊並建立 Rs 序列時,你需要確保 F 中的綜合得分與 Data 中的地區資訊是一一對應的。如果你的 F 是一個一維陣列,那麼你的程式碼應該是正確的。


......


[ChatGLM回答完畢]

4. 實驗總結

  • (1) 請回答:在實驗中你收穫哪些AI技巧?
  • (2) 請回答:在實驗中你解決了哪些問題?
  • (3) 請回答:在實驗中你還存在哪些問題沒有解決?

5.附件1:表格資料

6.附件2: 完整程式碼答案

# 第一部分:使用Pandas庫讀入Excel表格資料
import pandas as pd
Data=pd.read_excel('農村居民人均可支配收入來源2016.xlsx')
X=Data.iloc[:,1:]
R=X.corr()

# 第二部分:對資料進行標準化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X) 
X=scaler.transform(X)  

# 第三部分:對資料進行主成分分析,對原始資料的四個特徵
# 按照0.95的貢獻率進行降維
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95) 
pca.fit(X)
Y=pca.transform(X)  

# 第四部分: 
# 獲取每個主成分的貢獻率       
gxl=pca.explained_variance_ratio_ 
# 綜合得分=各個主成分*貢獻率之和
F=gxl[0]*Y[:,0]+gxl[1]*Y[:,1]+gxl[2]*Y[:,2] #綜合得分=各個主成分*貢獻率之和

# 第五部分:對31個省市的綜合得分進行排序輸出
dq=list(Data['地區'].values)  #提取地區
Rs=pd.Series(F,index=dq)           #以地區作為index,綜合得分為值,構建序列
Rs=Rs.sort_values(ascending=False) #按綜合得分降序進行排序

相關文章